我在尝试将 bash 脚本作为cronjob
which调用时遇到一些问题就是跑不起来。
以下列出一些可能导致故障的根源:
- 我通过编辑了 cron
sudo crontab -e
- 该脚本应该每天晚上 4 点运行,因此命令是
0 4 * * * bash ~/nightly_backup.sh
- 该脚本位于
/home/myuser/nightly_backup.sh
- 该脚本完全独立运行,无需任何用户输入
- 通过手动调用
sudo bash ~/nightly_backup.sh
就可以了 - crontab 中还有另一个命令,计划每 5 分钟运行一次,并且也能正常工作(
fswebcam -r ...
)
我究竟做错了什么?
此外:今天查看脚本是否已经运行,我会看到系统日志显示以下内容:
Feb 7 04:00:01 localhost CRON[7767]: (root) CMD (bash ~/nightly_backup.sh)
Feb 7 04:00:01 localhost CRON[7764]: (CRON) info (No MTA installed, discarding output)
Feb 7 04:00:03 localhost CRON[7765]: (CRON) info (No MTA installed, discarding output)
- “未安装 MTA,丢弃输出”是什么意思?
答案1
基本问题似乎是:~
其使用指的是home
当前用户的。
有关该问题的更多详细信息:
- 手动执行命令时,的值为
~
(/home/myuser
homemyuser
) - 当您使用 cron 执行命令时,的值为
~
(/root
homeroot
)
由于文件不在,因此/root/nightly_backup.sh
cron
无法执行它。
解决方案:
代替:
0 4 * * * bash ~/nightly_backup.sh
和:
0 4 * * * /home/myuser/nightly_backup.sh
请注意,您应该通过运行以下命令(一次)来确保 shell 脚本可执行:
chmod +x /home/myuser/nightly_backup.sh
注意:关于您的其他问题
“未安装 MTA,丢弃输出”是什么意思?
已答复这里
简而言之: 发生这种情况是因为您的 cron 作业正在产生输出,然后 cron 守护进程尝试将该输出通过电子邮件发送给您,而您的系统中没有安装邮件服务。
您可以通过以下方法之一解决此问题(更多信息请参见这里)
- 忽略该消息
- 安装邮件服务器
- 将 cron 作业输出重定向到 /dev/null
- 将 cron 任务输出重定向到
logger
,您将在syslog
日志中看到它