繁体   English   中英

Cron工作没有开始

[英]Cron job does not start

我有一个我想要每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上,您调用的所有命令( touchchmodcurl )都在/bin和/或/usr/bin

你是怎么设立cron工作的? 你是否以crontab some-file身份运行crontab some-file

似乎/etc/crontab是以root身份运行cron命令的常用机制。 在我的Ubuntu系统上, sudo crontab -l表示no crontab for root 像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后看看/tmp/scheduleSpider.sh.log的内容。 (您可以将命令设置为每分钟运行一次,这样您就不必等待结果。)如果可行(应该),您可以向脚本添加更多echo命令以详细查看它正在执行的操作。

看起来您的脚本只能运行一次; 它会创建sync.txt文件以防止它再次运行。 这可能是你问题的根源(咳咳)。 你的意图是什么? 你的意思是在运行命令后删除sync.txt ,只是忘记了吗?

root的Ubuntu主目录是/root 您的脚本第一次运行时,应该创建/root/sync.txt 该文件存在吗? 如果是这样,它多大了?

请注意, curl someLink (假设someLink是一个有效的URL)只会将指定链接中的内容转储到标准输出。 这是你的意图(它会显示为root的电子邮件吗?或者你只是没有告诉我们整个命令?

第一:您可以用*/5替换第一个字段(参见man 5 crontab)第二个:通过在crontab中输入MAILTO=your@email.address ,将输出邮件发送到您的电子邮件地址。 如果脚本有任何输出,它将被邮寄。 取而代之的是,您可以拥有一个本地邮箱,您可以在其中找到cron输出(通常为$ MAIL)。

CRON的更好的语法是

*/5 * * * * /scr_temp/scheduleSpider.sh

另外,请检查scheduleSpider.sh文件的权限。 Cron运行的用户不同于您可能以交互方式执行程序的用户,因此可能是cron没有权限。 现在尝试chmod 777 ,只是为了检查。

我建议:

  • 检查/scr_temp/scheduleSpider.sh是否具有可执行位
  • 在脚本中正确设置PATH或使用绝对路径命令( /bin/touch而不是touch
  • 指定sync.txt文件的绝对路径(或相对于脚本计算它)

您应该在脚本的绝对路径之前添加/ bin / sh。

*/5 * * * * /bin/sh /scr_temp/scheduleSpider.sh

您是通过crontab -e还是仅通过编辑crontab文件添加了命令? 您应该使用crontab -e来正确更新它。

在cron脚本中设置工作目录,它可能不会执行您认为应该执行的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM