Вопрос или проблема
Я создал простой скрипт, который пингует сервер и перезагружает мою машину, если сервер не отвечает. Если он отвечает, скрипт просто завершает выполнение.
Я добавил скрипт в cron через crontab -e, а именно следующим образом
*/8 * * * * /root/hive/bin/pingtest
После того как я добавил его, я вижу, что cron выполняет “pingtest” каждые 8 минут, как я и приказал. Однако, после перезагрузки машины (по любой причине), эта конкретная строка в crontab исчезает, она не сохраняется после перезагрузки.
Я пытался редактировать через root, я пытался редактировать через sudo, но ничего не сохраняется.
Что я делаю не так?
Хорошо, я нашел виновника. Это было в etc/crontab.root. Этот файл заполняет мой список заданий cron при каждой загрузке, я просто добавил свои изменения в него, и вуаля.
Ответ или решение
Почему задания cron не сохраняются после перезагрузки
Ситуация, с которой вы столкнулись, – это распространенная проблема, которую можно эффективно решить, исходя из понимания механизмов работы системы cron в Linux. Давайте рассмотрим востребованные аспекты более подробно.
Проблема
Вы правильно добавили задание в cron с помощью команды crontab -e
, чтобы ваш скрипт pingtest
выполнялся каждую восьмую минуту. Однако вы заметили, что после перезагрузки системы это задание исчезает.
Поскольку использованный вами метод корректен для поставленной задачи, рекомендуется обратить внимание на специфические особенности вашего окружения, которые могут блокировать ожидаемое поведение.
Причины исчезновения задания cron
-
Изменения в файле/etc/crontab.root: Как вы сами обнаружили, проблема заключалась в наличии файла
etc/crontab.root
, который может перезаписывать пользовательские задания cron при каждой загрузке системы. Этот файл, вероятно, управляется системой и имеет более высокий приоритет, чем ваши личные задания cron. -
Использование разных уровней доступа: Работа с cron может отличаться в зависимости от того, под каким пользователем вы вносите изменения. Убедитесь, что вы добавляете задания в crontab именно того пользователя, который будет запускать скрипт. Если ваш скрипт требует привилегий root, используйте
sudo crontab -e
. -
Проблемы с правами доступа: Если файл вашего скрипта не обладает необходимыми правами выполнения, cron просто не сможет его запустить, что также может вызывать путаницу.
Решения
-
Добавление задания в
etc/crontab.root
: Как вы уже сделали, это решение является самым простым и эффективным. Добавив ваше задание в этот файл, вы обеспечите его постоянное выполнение после перезагрузки. -
Создание скрипта для автоматизации выполнения задания: Вы можете создать отдельный скрипт, который будет добавлять ваши cron задания в файл crontab при каждой загрузке системы. Этот скрипт можно добавить в систему инициализации, такую как systemd или init.d.
-
Использование системных единиц: Вместо cron можно рассмотреть использование
systemd
для автоматизации задач. Создание системной единицы (сервиса) для вашего скрипта даст вам больше контроля и поможет избежать подобных проблем с перезагрузкой.
Заключение
Проблема с исчезновением заданий cron после перезагрузки может быть решена за счет понимания работы системы и дополнительных конфигураций. Изучение файла etc/crontab.root
и использование методов, описанных выше, помогут вам устранить проблему раз и навсегда. Если у вас есть дальнейшие вопросы или возникнут трудности с настройкой, не стесняйтесь обращаться за помощью.