操作系统:Ubuntu 16.04
我查看了很多不同的文章和帖子,但仍然无法让我的cron.hourly
作业自动运行。我正在尝试在我的 PostgreSQL 数据库上运行备份。在 中/etc/cron.hourly
,我只有一个名为 的脚本pg_backup
。以下是它的权限:
-rwxr-xr-x 1 root root 1543 Oct 16 19:07 pg_backup
如果我运行run-parts --test /etc/cron.hourly
,输出如下:
/etc/cron.hourly//pg_backup
看起来不错。如果我手动运行脚本run-parts
,它会按预期工作并备份我的数据库。这是我使用的命令:
run-parts -v --report /etc/cron.hourly
这很好,但不知出于什么原因,它不会每小时自动运行一次。我真的不知道哪里出了问题。我检查了所有日志,但找不到任何错误消息。
我错过了什么?
更新
我注意到我的/etc/crontab
文件指定了如下 shell:。SHELL=/bin/sh
我的脚本在 bash 中运行。将 shebang 放在脚本顶部是否足以使用 bash?#!/bin/bash
更新2
按照 Broco 的建议,我将这个任务放入了我的 crontab 中,但仍然不起作用。以下是我所做的:
sudo crontab -e
然后我在文件中添加了以下内容:
* * * * * root /etc/cron.hourly/pg_backup
我让它每分钟运行一次,以便更快地获得它是否正在运行的反馈,它似乎正在运行,但实际上并没有执行备份。
这是我的 syslog 的一部分。我使用了以下命令grep CRON /var/log/syslog
:
Oct 17 14:02:01 User CRON[63871]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:02:01 User CRON[63870]: (CRON) info (No MTA installed, discarding output)
Oct 17 14:03:01 User CRON[63917]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:03:01 User CRON[63916]: (CRON) info (No MTA installed, discarding output)
Oct 17 14:04:01 User CRON[63966]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:04:01 User CRON[63965]: (CRON) info (No MTA installed, discarding output)
Oct 17 14:05:01 User CRON[64013]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:05:01 User CRON[64012]: (CRON) info (No MTA installed, discarding output)
Oct 17 14:05:01 User CRON[64014]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Oct 17 14:06:01 User CRON[64060]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:06:01 User CRON[64059]: (CRON) info (No MTA installed, discarding output)
Oct 17 14:07:01 User CRON[64106]: (root) CMD (root /etc/cron.hourly/pg_backup)
Oct 17 14:07:01 User CRON[64105]: (CRON) info (No MTA installed, discarding output)
答案1
你的 cron 任务是正在运行,但作业遇到了问题。
通常,您应该收到一封包含输出(和错误!)的电子邮件,但是您没有收到电子邮件,因为:
Oct 17 14:02:01 User CRON[63870]: (CRON) info (No MTA installed, discarding output)
您的系统上没有安装任何可以发送邮件的东西。因此,输出将被丢弃。
考虑安装 MTA这样您就可以通过电子邮件收到输出,然后了解实际发生的情况。
答案2
我找到了答案!正如 Michael Hampton 指出的那样,我的作业正在运行,但出现了一些错误。我没有安装 MTA,因此我postfix
使用进行安装sudo apt-get install postfix
。安装后,我能够查看文件/var/mail/root
以查看与我的作业相关的错误消息cron
。
我的主要问题最终与缺少环境变量有关。由于cron
在 上运行root
,因此每次运行脚本时都不会设置我的环境变量。因此,我将我的包含.bashrc
在脚本的顶部,如下所示:
source "$HOME/.bashrc"
在我的root
用户的中.bashrc
,我添加了脚本所需的环境变量。但这仍然不起作用;脚本运行时仍未设置环境变量。为了解决这个问题,我在包含 的行之前添加了以下行.bashrc
:
export PS1="1"
从此主题,这个环境变量可以防止.bashrc
在非交互式会话中加载,因此当设置它时,.bashrc
将会加载。
非常感谢大家的帮助!