crontab 有时不起作用

crontab 有时不起作用

我尝试通过 crontab 执行脚本,但有些脚本可以运行,而其他脚本则不行。为什么会发生这种情况?

username@here> crontab -l
00 13 * * * csh -c /home/apps/bin/jobnumberone.pl
00 18 * * * csh_cmd /home/apps/bin/forcestartjob.pl job_a
5 22 * * 1-5 csh_cmd /home/apps/bin/forcestartjob.pl job_b
5 1 * * 1-5 /home/apps/bin/forcestartjob.pl job_c
5 1 * * 1-5 /home/apps/test/write_to_file.sh

write_to_file.sh只是将当前时间打印到文件test1.txt。当我检查时test1.txt,会显示正确的时间戳,这表明我确实有权修改 crontab,并且至少有一个 crontab 事件正在正确的时间执行。(是的,我在 crontab 文件末尾确实有额外的一行。)

此外,我可以直接运行/home/apps/bin/forcestartjob.pl job_c,但当我尝试从 crontab 运行它时,它不会执行。执行的权限似乎有效:

username@here> ls -l "/home/apps/bin/forcestartjob.pl"
-rwxr-xr-x   1 name     name     Jan 20 08:27 /home/apps/bin/forcestartjob.pl

答案1

解决方案:将整个命令括在双引号中。

提示:检查mail因为它会显示一个小日志。它将位于类似 的目录中/var/mail。您可以使用cat /var/mail/username来显示所有消息。

解释:我的问题是,我的脚本需要将参数作为命令中的参数传递。crontab 将用空格分隔的所有内容解释为单独的对象,因此我的命令执行时出错。使用双引号将使 crontab 将整个命令作为一个命令执行。

前任:

  • 原始 =

    csh -c /home/apps/bin/forcestartjob.pl job_b

  • 正确 =

    csh -c "/home/apps/bin/forcestartjob.pl job_b"

我花了很长时间才发现这个愚蠢的问题,但希望这能在未来帮助到其他人。

相关内容