cron 脚本未在 sudo 上运行

tai*_*tai 3 command-line bash sudo scripts cron

我在尝试将 bash 脚本调用为无法运行时遇到cronjob一些问题

以下是为了消除一些可能的故障来源:

  • 我通过编辑 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)
Run Code Online (Sandbox Code Playgroud)
  • “未安装 MTA,丢弃输出”是什么意思?

Yar*_*ron 6

基本问题似乎是:~其中的使用指的是home当前用户的使用。

有关该问题的更多详细信息:

  • 手动执行命令时,值为~( /home/myuserhome myuser)
  • 当使用cron执行命令时,值为~( /roothome root)

由于该文件不存在,因此/root/nightly_backup.sh cron无法执行它。

解决方案:

代替:

0 4 * * * bash ~/nightly_backup.sh
Run Code Online (Sandbox Code Playgroud)

和:

0 4 * * * /home/myuser/nightly_backup.sh
Run Code Online (Sandbox Code Playgroud)

请注意,您应该通过运行以下命令(一次)来确保 shell 脚本是可执行的:

chmod +x /home/myuser/nightly_backup.sh
Run Code Online (Sandbox Code Playgroud)

注:关于你的另一个问题

“未安装 MTA,丢弃输出”是什么意思?

在这里得到了解答

简而言之: 发生这种情况是因为您的 cron 作业正在生成输出,然后 cron 守护程序尝试将该输出通过电子邮件发送给您,而您的系统中没有安装邮件服务。

您可以通过以下方法之一解决它(更多信息在这里

  • 忽略该消息
  • 安装邮件服务器
  • 将 cron 作业输出重定向到 /dev/null
  • 将 cron 作业输出重定向到,您将在日志logger中看到它syslog