我在设置 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
一些东西...
30 22 * * 0
表示每周日晚上 10:22。不是每天。如果您想要每周日,请在第五个时间字段中使用 *。中的文件
/etc/cron.d/
采用略有不同的格式。第二个参数(时间字符串之后)设置它将以哪个用户身份运行。要这样做,您的文件应显示为:30 22 * * * root apt-get update && apt-get upgrade -y
中的文件
/etc/cron.daily/
实际上应该是独立的脚本,非 cron 格式的字符串。要这样做,您的文件应如下所示:#!/bin/sh set -e apt-get update apt-get upgrade -y
也许最重要的是……如果你想自动更新,我建议使用类似
apticron
。它能让你更好地控制什么是自动安装,什么没有安装。它还会发送包含更改日志等的电子邮件...我认为这就是您想要的。