我创建了一个 bash 脚本来自动更新我的 Ubuntu 服务器。脚本如下:
#!/bin/bash
apt-get update
apt-get upgrade
echo "Update am $(date "+%d. %m. %y|%H:%M:%S) >> /var/log/update.log
exit 0
日志文件始终是空的。crontab:
0 3 * * * /drives/files/scripts/update.sh
我知道,我可以在设置中设置 Ubuntu 服务器自动更新,但这是为了了解 cron 和一些脚本。
谢谢
答案1
我认为您正在以普通用户的身份使用 crontab,这意味着如果不提供 sudo,他就无法更新/升级系统。
此外apt-get update
,apt-get upgrade
还会提示用户确认,因此您必须先通过此确认。
yes | apt-get update
yes | apt-get upgrade
因此,要解决这个问题,您必须使用 sudo 运行命令,但这会给您带来如何向 sudo 提供密码的问题。
而且
echo "Update am "$(date "+%Y-%m-%d %H:%M:%S") >> /var/log/update.log
正在写入 /var/log/... 这意味着需要获得普通用户无法获得的权限才能执行此操作。
为了解决这个问题,您应该在 root cron 中运行脚本。
sudo crontab -e
将在您的默认编辑器中打开根 cron 文件。
添加脚本的条目
0 3 * * * /drives/files/scripts/update.sh
现在保存并退出。
附言:以防万一,请确保您授予脚本执行权限。为此,请运行以下命令:
chmod +x /path-to-script
答案2
为什么它不工作?
要做到apt-get update
这一点,apt-get upgrade
您必须成为 sudo 用户。我的意思是您的脚本应该以 sudo 权限执行。
还有其他停留吗?
是的,您没有给出让-y
升级命令在更新后自动下载的命令。
这是一件大事吗?
是的,如果你没有在命令中传递 -y,那么你的 cron 将停止并寻找 '-y' 参数,并且直到得到 '-y' 才会执行
如何以 root 用户身份执行 cron 脚本?
sudo crontab -e
它会要求您选择编辑器并选择 nano,然后添加您的行。但完整的脚本应该是这样的
apt-get update
apt-get upgrade -y
apt-get dist-upgrade -y
希望有所帮助。