我发现 cron 执行的脚本出现了一些奇怪的行为,我不太清楚到底发生了什么。该脚本看起来好像要删除软件包,但最后却挂起了,什么也没做。
这是 cronjob。
06 15 * * * root /myscript.sh > /tmp/script.log 2&>1
这是该脚本的(简化版本)。
#!/bin/bash
PACKAGES_TO_PURGE="htop"
if [ -n "$PACKAGES_TO_PURGE" ]; then
echo "Purging $PACKAGES_TO_PURGE"
echo
#sudo apt-get purge -y $PACKAGES_TO_PURGE
apt-get purge -y $PACKAGES_TO_PURGE
echo "Done"
echo
else
echo "Nothing to purge"
fi
这是日志文件的输出。
0 upgraded, 0 newly installed, 1 to remove and 62 not upgraded.
After this operation, 188 kB disk space will be freed.
Done
手动运行这个脚本是可行的,我只在使用 cron 运行它时遇到问题,所以我不太清楚到底是怎么回事。
sudo
如果我将apt-get 命令添加到其中,我甚至可以使该脚本运行。
我在想是不是我忽略了一些简单的事情,但却没有发现什么。
答案1
看看答案这个帖子;有人尝试从 cron 创建一个apt-get upgrade
,但遇到了类似的问题。
看来您需要设置 PATH 环境变量才能使 apt 工作。例如:PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
答案2
我在尝试在 crontab 中运行脚本时遇到了类似的问题。我在脚本中使用 apt-get update 自动更新。我需要将使用命令 $PATH 找到的路径添加到我的脚本中:
#!/bin/bash
PATH=/usr/lib64/ccache:usr/local/bin:/bin:/usr/local/sbin:/usr/sbin:home/learner2/.local/bin:/home/learner2/bin
apt-get -y update
之后我的脚本与 crontab 一起工作。