每日 Cron 作业未运行

每日 Cron 作业未运行

我在设置 cron 作业以使其每天运行时遇到了麻烦,当我输入脚本/etc/cron.daily时,它根本没有像它应该的那样运行。

我设置了一个脚本,以便它可以使我的存储库保持最新状态,然后下载它发现的任何需要升级的新软件包。我不想这样做,crontab -e因为它不允许我设置自己的单独文件来运行此脚本,因为它似乎只会将其转储到/tmp目录中。这是我的 cron 脚本的样子;

#!/bin/sh

30 22 * * 0 apt-get update && apt-get upgrade -y

似乎没有任何迹象表明这是有效的,除了我得到与 apt 相关的错误mailx

E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root

我会认为这是在 root 级别运行的,/etc/cron.daily因为它属于 root?读取权限时drwxr-xr-x 2 root root 4096 Sep 28 06:02 cron.daily我不太确定是否应该添加sudo到命令中,因为这样它就会坐在那里等待输入密码。

另外,我如何才能让它记录更新的软件包,以便我以后可以查看它们?或者 apt 是否已将它们记录到它自己的日志文件中?如果是的话,它在哪里?我希望它只输出它升级的安装软件包的名称和版本,以便在日志文件中显示类似这样的内容,即;

<package> @ <version> --> <new_package> @ <version>   <date> <time>

答案1

一些东西...

  1. 30 22 * * 0表示每周日晚上 10:22。不是每天。如果您想要每周日,请在第五个时间字段中使用 *。

  2. 中的文件/etc/cron.d/采用略有不同的格式。第二个参数(时间字符串之后)设置它将以哪个用户身份运行。要这样做,您的文件应显示为:

    30 22 * * *  root  apt-get update && apt-get upgrade -y
    
  3. 中的文件/etc/cron.daily/实际上应该是独立的脚本,非 cron 格式的字符串。要这样做,您的文件应如下所示:

    #!/bin/sh
    set -e
    apt-get update
    apt-get upgrade -y
    
  4. 也许最重要的是……如果你想自动更新,我建议使用类似apticron。它能让你更好地控制什么是自动安装,什么没有安装。它还会发送包含更改日志等的电子邮件...我认为这就是您想要的。

相关内容