cron.hourly 作业未运行

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

这很好,但不知出于什么原因,它不会每小时自动运行一次。我真的不知道哪里出了问题。我检查了所有日志,但找不到任何错误消息。

我错过了什么?

更新

我注意到我的/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将会加载。

非常感谢大家的帮助!

相关内容