让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?