cron 脚本未在 sudo 上运行

cron 脚本未在 sudo 上运行

我在尝试将 bash 脚本作为cronjobwhich调用时遇到一些问题就是跑不起来

以下列出一些可能导致故障的根源:

  • 我通过编辑了 cronsudo 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/myuserhome myuser
  • 当您使用 cron 执行命令时,的值为~( /roothome root)

由于文件不在,因此/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日志中看到它

相关内容