shell – Cron作业无法启动
我有一个我想要每5分钟执行一次的cron作业:
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /scr_temp/scheduleSpider.sh 在/ var / spool / cron / crontabs / root中 cron应该执行shell脚本: #!/bin/sh if [ ! -f "sync.txt" ]; then touch "sync.txt" chmod 777 /scr_temp curl someLink fi 从命令行可以正常工作,但不能从cron工作.然而,cron本身是startet但脚本没有启动. 我读到了路径问题,但我真的不明白.我设置了一个将一些env数据写入文件的cron.这是输出: HOME=/root LOGNAME=root PATH=/usr/bin:/bin SHELL=/bin/sh 如果我在命令行中执行env命令,我会得到以下PATH输出 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 我必须在shell脚本中设置什么路径? 解决方法
你的$PATH很好;不要管它.在Ubuntu上,您调用的所有命令(touch,chmod,curl)都在/ bin和/或/usr/bin中.
你是怎么设立cron工作的?你是否以root身份运行crontab some-file? 似乎/ etc / crontab是以root身份运行cron命令的常用机制.在我的Ubuntu系统上,sudo crontab -l表示没有用于root的crontab.像root用户一样以root身份运行crontab应该没问题,但您可以考虑使用/ etc / crontab.请注意,它使用与普通crontab不同的语法,如/ etc / crontab顶部的注释中所述: $head -5 /etc/crontab # /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields,# that none of the other crontabs do. 运行sudo crontab -l.它会显示你的命令吗? 暂时修改脚本,使其始终产生一些可见的输出.例如,在#!/ bin / sh之后添加以下内容: echo "Running scheduleSpider.sh at `date`" >> /tmp/scheduleSpider.sh.log 几分钟后看看/tmp/scheduleSpider.sh.log中的内容. (您可以将命令设置为每分钟运行一次,这样您就不必等待结果.)如果可行(应该),您可以向脚本添加更多echo命令,以详细查看它正在执行的操作. 看起来您的脚本只能运行一次;它会创建sync.txt文件以防止它再次运行.这可能是你问题的根源(咳咳).你的意图是什么?你的意思是在运行命令后删除sync.txt,只是忘记了吗? root的Ubuntu主目录是/ root.您的脚本第一次运行时,应该创建/root/sync.txt.该文件存在吗?如果是这样,它多大了? 请注意,curl someLink(假设someLink是一个有效的URL)只会将指定链接中的内容转储到标准输出.那是你的意图(它会显示为root的电子邮件吗?或者你只是没有告诉我们整个命令? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |