让crontab工作的问题。

嘿伙计们我真的很喜欢linux并且还在学习,所以希望这对你们来说很容易。

我正在尝试更多地了解如何使用cron在我的ubuntu机器上安排事件。 现在我有一个脚本(script.sh),如下所示:

#!/bin/bash echo "I work" 

我以root身份登录终端(sudo -i)并进入:

 sudo bash /home/lskidson/tests/script.sh 

当我这样做时,它正确执行脚本。 (仍然以root身份登录)我有一个crontab设置为每分钟执行一次这个脚本我无法工作它如下(我使用crontab -e设置)

 * * * * * sudo bash /home/lskidson/tests/script.sh 

我把它写到文件然后当我打印作业列表(crontab -l)时,它正确地显示为我要求它。 但是,脚本永远不会运行。

你们有什么关于可能出错的一般提示吗? 如果需要,我可以提供更多信息。 提前致谢!

你怎么知道它永远不会运行? 它不会回应你的终端。 首先放弃sudo ……永远不应该在cronjob中。 root用户的crontab以root身份运行,用户的crontab以用户身份运行,相应地放置脚本。

将输出管道传输到文件中

 echo "I work" > /path/to/some/file.txt 

要么

 * * * * * /home/lskidson/tests/script.sh > /path/to/some/file.txt 

使用>覆盖文件,>>以附加到它。

与shebang #!/bin/bash你已经定义了这是一个Bash脚本。 下一步是创建文件可执行文件以运行它而不使用命令bash

 chmod +x /home/lskidson/tests/script.sh 

通常,命令sudo不适用于crontab 。 如果你需要通过root运行Cronjob,你可以使用root的crontab,这可以通过命令sudo crontab -e来实现。

现在我们可以转到Crontab的问题了。 您希望收到“我工作”的消息? 几乎没有。

1.如果可执行文件生成输出文件,或者仅修改某些内容,则Cron作业应为:

 * * * * * /home/lskidson/tests/script.sh 

2.如果程序没有写任何输出文件并且只在stdout中生成一些数据(就像你的情况那样),你应该将它重定向到一个文件,看它到一个合适的位置(这部分2>&1重定向和stdout的错误消息)

 * * * * * /home/lskidson/tests/script.sh >> /home/lskidson/tests/script.sh.log 2>&1 

3.虽然未重定向stdout,但Cron会向用户发送本地邮件 (如果您的本地邮件设置正确),除非通过在crontab设置变量MAILTO来覆盖它:

 MAILTO="my@custom.mail" * * * * * /home/lskidson/tests/script.sh 

参考文献:

  • 如何检测cron作业中的错误
  • 如何让cron创建cron.log?