centos7 定时任务手动可以执行但是添加到crontab中无法执行的问题

您所在的位置:网站首页 无法创建打印任务 centos7 定时任务手动可以执行但是添加到crontab中无法执行的问题

centos7 定时任务手动可以执行但是添加到crontab中无法执行的问题

2023-09-18 08:32| 来源: 网络整理| 查看: 265

说明:

提示:提示:提示:这篇文章仅是记录自己成长路上的愚笨,不喜勿喷,同时也希望各路大神提出优秀的观点。谢谢!!

问题描述:

自己写了一篇自动分割并保存指定数量的tomcat分割日志脚本,发现手动可以执行,但是添加到crontab中就无法执行的问题。

分析过程: 首先需要查看cron执行的日志: [root@localhost cron.d]# tail -f /var/log/cron [root@localhost cron.d]# tail -f /var/log/cron Jan 18 20:01:01 localhost run-parts(/etc/cron.hourly)[27129]: starting 0anacron Jan 18 20:01:01 localhost run-parts(/etc/cron.hourly)[27141]: finished 0anacron Jan 18 20:02:01 localhost CROND[27175]: (admin) CMD (/home/web_programs/house_keeper/apache-tomcat-8.5.28/test.sh)

发现日志已经执行了自己写的脚本,但是脚本运行后的结果和手动执行后的结果不同,也就是说脚本执行错误。那么哪儿错误了呢?

查看自动运行脚本抛出的异常 [admi@localhost ~]$ crontab -e

把脚本运行结果定向到一个日志文件,然后保存

0 3 * * * /home/program/house/apache-tomcat-8.5.28/logs/deal_log.sh> /home/admi/111.txt

这样就可以看到脚本的运行错误了! 最后的结果是脚本中有这样一句代码

LOG_PATH=`pwd`

然后发现LOG_PATH变量的路径与要分析的路径不一致!

然后我就懵逼了。。。。 明明定义的脚本的目录是在需要分析的路径中啊,为什么自动执行的时候路径会不对呢? 度娘了一通,度娘说定时任务的脚本要写绝对路径! 我不死心。。。

验证过程:

手写测试脚本 #!/bin/bash # Author:admi # Date:2021-01-18 # Description:test cron jobs set -x test_path=`pwd` echo ${test_path} > /home/admin/111.txt 添加到crontab中 */1 * * * * /home/programs/house/apache-tomcat-8.5.28/test.sh > /home/admin/111.log

然后查看111.log文件内容,发现打印的是:/home/admi

注意:我的脚本不是root用户添加的cron

继续度娘 有的说是修改cron的配置文件(/etc/crontab)在该文件中添加 HOME=自己定义的目录,这样cron的脚本就会在自定义的目录中执行了。

继续验证 但是经过验证后发现无效!!

ps:可能我还是配置的不对,如果有成功的大神,希望不吝赐教,先叩首了。。。

最后:

目前我验证到的结论是: cron自动执行的脚本的执行目录是用户的主目录(普通用户:~;root用户:/),所以书写cron脚本时脚本使用路径时一定要写绝对路径,以免发生错误! 在这次排错过程中还收获了:

cron执行的环境和用户的环境也不一样;所以在排查问题是也要注意脚本执行失败是不是环境的问题(cron环境请执行 cat /etc/crontab查看)crontab的默认执行路径为:当前用户的主目录。在/etc/cron.deny中可以定义不可使用cron的用户(如果不能执行cron看是否被限制) 满足以上的条件,脚本基本上可以正常执行了。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3