linux crontab执行shell脚本中包含相对路径的问题
来源:互联网 发布:淘宝上怎么找卖片的 编辑:程序博客网 时间:2024/05/16 02:49
实例一 test.sh文件
echo `date`>test.log
配置crontab
设置 */1 * * * * sh /data/test.sh
在/data/目录下,未找到test.log文件,重启了crontab服务,service cronb restart,发现还是不行。
在网上找资料,怀疑是相对路径的问题,然后,在home目录下,cd ~,发现了test.log。
转摘资料:
crontab执行java程序的问题:
一 crontab使用注意:
crontab -l查看该用户的crontab配置,crontab -e编辑该用户的crontab配置配置一般在末尾加上 2>&1表示错误输出(2)和标准输出(1)一样输出到同一个由前面>>指定的地方
如 15 14 * * * /sys_back/monitor.sh >>/sys_back/log/monitor.log 2>&1
表示每天14:15执行monitor.sh脚本,错误和标准输出都写入monitor.log文件
涉及到文件名时最好写绝对路径!
二 问题及解决
shell脚本有echo语句,有java -jar执行java程序。直接执行脚本时,一切顺利,但是放到crontab中执行时,echo语句正常,java程序却没有执行。
1 网上查找,觉得应该是环境变量的问题。说是要将java环境变量加入到shell脚本中,按照
这个方法做,发现问题依然存在。百思不得其解。
2 经转换角度,看java程序是否有问题。在java语句中直接加入打印语句,发现其在crontab日志中
居然可以显示。终于确定是java程序的问题。java程序功能很简单,就是一个语句java -Dosgi.console -Dosgi.configuration.area=./configuration -jar equinox.jar -console用来启动osgi框架。
于是在shell脚本中不调用java程序,直接改为程序中的这一句,问题解决。
但是又引发新的问题:直接java -jar会源源不断的输出osgi>到日志文件,导致日志文件越来越大。
不可行。再想办法解决。
3 感觉还是相对路径的问题。尝试在crontab调用的脚本中用相对路径向一个文件输出一句话,发现失败。(单独执行脚本没问题)既然如此,是不是java程序中也不能用相对路径呢。遂将./configuration及equinox.jar都用绝对路径,再调试,终于成功,至此问题解决。但始终感觉在程序中用绝对路径很不方便维护。
三 附加问题及解决
此脚本的作用就是判断osgi程序是否在运行,如果不运行则启动。
实现思路是ps -elf得到进程id及状态,如果id不存在,则启动,如果id存在但状态不是运行中(solaris为O,AIX为A),则杀掉原进程重新启动。
发现程序在运行几天后会自动停掉,以为是java程序有问题,然而却始终找不到问题在哪里。在解决上面问题时,却意外的发现可能不是java程序的问题。man ps时发现,solaris中,进程状态除了O,还有S(sleeping) R(Runnable) Z(Zombie僵尸进程)T(stopped),只有后两种状态下进程才是有问题的,所以很可能是crontab执行脚本时,程序状态非O就被杀掉,重启时却因为上面的问题没成功。于是修改脚本,状态是后两种时才重启。这个问题也解决了。
- linux crontab执行shell脚本中包含相对路径的问题
- crontab执行任务调用shell脚本,相对路径无法找到
- 解决调用shell脚本中相对路径的问题
- crontab中PHP inlucde相对路径导致脚本不执行的解决办法
- [Shell]crontab 执行任务调用shell脚本,相对路径无法找到
- Linux下shell脚本手动执行和放在crontab中自动执行的结果不一样
- crontab不支持相对路径脚本的解决方法
- shell脚本放到crontab里就执行不成功的问题
- linux系统crontab执行jar包的shell脚本
- 通过linux的crontab实现定时执行shell脚本功能
- Linux shell脚本中执行命令结果赋值给变量&&echo输出变量是否包含换行符的问题
- 谨防php包含文件的相对路径问题导致的crontab无法正常运行
- linux 定时执行shell脚本 crontab
- linux crontab 无法执行shell脚本解决方法
- Crontab 让linux定时执行shell脚本
- Linux利用crontab定时执行shell脚本
- crontab的相对路径的问题
- 使用crontab,让linux定时执行shell脚本【crontab -e】
- 用protoc-gen-lua生成PB的lua代码
- java设计模式--观察者模式和事件监听器模式
- Low Memory Killer
- OpenCV实现的高斯滤波探究_1(《学习OpenCV》练习题第五章第三题ab部分)
- Windows中如何删除一个目录下所有的.svn目录
- linux crontab执行shell脚本中包含相对路径的问题
- Google C++编程规范:(三)类
- Bandwidthd+Postgresql数据库配置笔记
- Java Design Pattern: State
- WebService第二步 - 按规定的标准开发
- java数字保留2位小数
- ios7 UIAnimation
- openSSL使用手册
- JBMP中文乱码问题的解决方案