Я вижу странное поведение скрипта, выполняемого 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.
Я думаю, что есть кое-что легкое, что я не замечаю, но на меня ничего не бросается.
Взгляните на ответ в эта почта; кто-то пытался сделать apt-get upgrade
из cron и получил аналогичную проблему.
Кажется, что вам нужно настроить переменную среды PATH, чтобы она работала. Например: PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Я столкнулся с аналогичной проблемой, пытаясь запустить свой скрипт в 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.