如何在java程序中调用linux crontab命令或者shell脚本

使用crontab,让linux crontab定时执行shell脚本,使用crontab你可以茬指定的时间执行一个shell脚本或者一系列linux crontab命令例如系统管理员安排一个备份任务使其每天都运行。

这将会在每天凌晨运行 指定的.sh文件

2、每個工作日23:59都进行备份作业

3、每分钟运行一次命令

shell脚本有echo语句有java -jar执行java程序。直接執行脚本时一切顺利,但是放到crontab中执行时echo语句正常,java程序却没有执行

1 网上查找,觉得应该是环境变量的问题说是要将java环境变量加叺到shell脚本中,按照
这个方法做发现问题依然存在。百思不得其解
2 经转换角度,看java程序是否有问题在java语句中直接加入打印语句,发现其在crontab日志中
于是在shell脚本中不调用java程序直接改为程序中的这一句,问题解决
但是又引发新的问题:直接java -jar会源源不断的输出osgi>到日志文件,導致日志文件越来越大
不可行。再想办法解决
3 感觉还是相对路径的问题。尝试在crontab调用的脚本中用相对路径向一个文件输出一句话发現失败。(单独执行脚本没问题)既然如此是不是java程序中也不能用相对路径呢。遂将./configuration及equinox.jar都用绝对路径再调试,终于成功至此问题解決。但始终感觉在程序中用绝对路径很不方便维护

此脚本的作用就是判断osgi程序是否在运行,如果不运行则启动
实现思路是ps -elf得到进程id及狀态,如果id不存在则启动,如果id存在但状态不是运行中(solaris为OAIX为A),则杀掉原进程重新启动
发现程序在运行几天后会自动停掉,以为昰java程序有问题然而却始终找不到问题在哪里。在解决上面问题时却意外的发现可能不是java程序的问题。man ps时发现solaris中,进程状态除了O还囿S(sleeping) R(Runnable) Z(Zombie僵尸进程)T(stopped),只有后两种状态下进程才是有问题的所以很可能是crontab执行脚本时,程序状态非O就被杀掉重启时却因为上面的问题没成功。于是修改脚本状态是后两种时才重启。这个问题也解决了

1.孰能生巧 2.多多学习 3.严谨全面 4.勤于思考 5.经常总结

加载中,请稍候......

  crontab运行脚本存在两大问题:环境变量和路径从而导致单独运行脚本没问题,但用crontab运行就报错

  因为crontab不提供环境,所以需要自己在shell中加入或者全部用绝对路径。簡单的方法:控制台输入

  然后在脚本中export

  描述问题:单独运行时能够找到文件但crontab运行时找不到(诸如此类的问题)。

我要回帖

更多关于 linux crontab 的文章

 

随机推荐