为什么我的 bash 脚本不能与 cron 一起工作?

为什么我的 bash 脚本不能与 cron 一起工作?

我创建了一个 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 updateapt-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

希望有所帮助。

相关内容