Linux-Cron定时任务路径问题

润信云 技术支持

需求

设置一个cron定时任务,定时执行一个shell脚本,脚本执行一个jar包中的程序,发现jar包的日志输出路径错误。记录一下。

image.png

cron定时任务

crontab -e # 编辑当前用户的定时任务
*/1 * * * * /xxx/xxx/test.sh # 设置为1分钟执行一次,这个路径的脚本。保存修改并退出。该脚本需要提前提升为可执行权限。

# 通过如下命令查看是否执行成功
cat /var/logs/corn # 通过这个命令可以看到是否执行了

结果发现,定时任务调用脚本执行了,但是脚本调用jar包,执行失败了。

通过网上搜索,发现失败原因如下:

  • 当以root账户设置cron定时任务时,默认的执行路径是在/root下。如果是其他用户,则在/用户目录下。

  • 脚本中都是以相对路径,写的 java -jar xxx.jar 所以,找不到 java 和 jar 包

  • 把 java 和 xxx.jar 换成绝对路径,jar包成功执行

但是,jar包中的日志信息,并输出到 /root/logs/ 目录下,现在想让jar包的日志信息输出到, /xxx/jarPath/logs 目录下,只需要在脚本中加入 cd /xxx/jarPath.

总结

cron定时任务执行的默认路径是/用户目录,所以在脚本中最好使用绝对路径,并且加入 cd /xxx/jarPath/. 或者使用pwd拼接

cron定时命令的格式

# For details see man 4 crontabs

# Example of job definition:

# .---------------- minute (0 - 59)

# | .------------- hour (0 - 23)

# | | .---------- day of month (1 - 31)

# | | | .------- month (1 - 12) OR jan,feb,mar,apr …

# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# | | | | |

# * * * * * user-name command to be executed

定时任务的每段为:分,时,日,月,周,用户,命令

第1列表示分钟1~59 每分钟用*或者 */1表示

第2列表示小时1~23(0表示0点)

第3列表示日期1~31

第4列表示月份1~12

第5列标识号星期0~6(0表示星期天)

第6列要运行的命令


:表示任意时间都,实际上就是“每”的意思。可以代表00-23小时或者00-12每月或者00-59分

-:表示区间,是一个范围,00 17-19 * * * cmd,就是每天17,18,19点的整点执行命令

,:是分割时段,30 3,19,21 * * * cmd,就是每天凌晨3和晚上19,21点的半点时刻执行命令

/n:表示分割,可以看成除法,/5 * * * * cmd,每隔五分钟执行一次

image.png

本文链接:https://blog.runxinyun.com/post/275.html 转载需授权!

分享到:
版权声明
网站名称: 润信云资讯网
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!邮件:7104314@qq.com
网站部分内容来源于网络,版权争议与本站无关。请在下载后的24小时内从您的设备中彻底删除上述内容。
如无特别声明本文即为原创文章仅代表个人观点,版权归《润信云资讯网》所有,欢迎转载,转载请保留原文链接。
0 90

留言0

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。