cron.hourly工作不运行

操作系统: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

这很好,但不pipe什么原因,它不是每个小时都运行一次。 我真的不知道什么是错的。 我检查了所有的日志,一直没有find任何错误信息。

我错过了什么?

UPDATE

我注意到我的/etc/crontab文件有如下所示的shell: SHELL=/bin/sh 。 我的脚本在bash中运行。 把脚本放在我的脚本的顶部是否足以使用bash? #!/bin/bash

更新2

正如Broco所build议的那样,我把这个工作放到了我的crontab中,但仍然不能工作。 以下是我所做的:

sudo crontab -e

然后我将以下内容添加到文件中:

* * * * * root /etc/cron.hourly/pg_backup

我每分钟都会运行一次,以获取有关是否正在运行的更快反馈,并且似乎正在运行,但实际上并没有执行备份。

这是我的系统日志的一部分。 我使用命令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) 

你的cron工作正在运行,但工作有问题。

你通常应该得到一个电子邮件与输出(和错误!),但你不会收到电子邮件,因为:

 Oct 17 14:02:01 User CRON[63870]: (CRON) info (No MTA installed, discarding output) 

您的系统上没有可以发送邮件的任何东西。 这样,输出就被扔掉了。

考虑安装一个MTA,这样你可以通过电子邮件发送给你,然后找出实际发生的事情。

我想到了! 正如迈克尔·汉普顿(Michael Hampton)指出的,我的工作正在运行,但有一些错误。 我没有安装MTA,所以我使用sudo apt-get install postfix 。 这样做之后,我可以查看/var/mail/root文件来查看与我的cron作业相关的错误消息。

我的主要问题最终与缺less的环境variables有关。 由于cronroot运行,我的环境variables在脚本运行时没有设置。 所以,我在我的脚本的顶部包含了我的.bashrc ,如下所示:

source "$HOME/.bashrc"

在我的root用户的.bashrc ,我添加了脚本所需的环境variables。 尽pipe如此,这还是行不通的。 当脚本运行时,环境variables仍然没有被设置。 为了解决这个问题,我在包含.bashrc行之前添加了以下行到我的脚本:

export PS1="1"

在这个线程中 ,这个环境variables阻止了在非交互式会话中加载.bashrc ,所以当它被设置时, .bashrc将会被加载。

非常感谢大家的帮助!