我尝试通过 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"
我花了很长时间才发现这个愚蠢的问题,但希望这能在未来帮助到其他人。