man 5 crontab
довольно ясно, как использовать crontab для запуска скрипта при загрузке:
These special time specification "nicknames" are supported, which replace the 5 initial time and date
fields, and are prefixed by the `@` character:
@reboot : Run once after reboot.
Поэтому я с радостью добавил одну строку в свой crontab (под моей учетной записью, а не root):
@reboot /home/me/myscript.sh
Но по какой-то причине myscript.sh не запускается при перезагрузке компьютера. (он работает нормально, если я вызываю его из командной строки, поэтому это не проблема с разрешениями)
Чего мне не хватает?
Обновление, чтобы ответить на вопросы @ Anthon:
- Версия Oracle-linux: 5.8 (uname: 2.6.32-300.39.2.el5uek # 1 SMP)
- Версия Cron: vixie-cron-4.1-81.el5.x86_64
- Да,
/home
это смонтированный раздел. Похоже, это проблема. Как мне обойти это? - В настоящее время
myscript.sh
выводится только текстовое сообщение в файл в/home/me
.
/home
смонтированный раздел? Какое содержание у вас/home/me/myscript.sh
?@reboot
. oss.oracle.com/pipermail/el-errata/2012-March/002655.htmlmyscript.sh
исполняемый файл?chmod +x myscript.sh
,Ответы:
Это может быть немного запутанной темой, потому что существуют разные реализации cron. Также было несколько ошибок, которые нарушали эту функцию, и есть также некоторые случаи использования, когда она просто не будет работать, особенно если вы выполняете выключение / загрузку вместо перезагрузки.
ошибки
дата № 1
Здесь описана одна такая ошибка в Debian под названием: cron: @reboot задания не выполняются . Похоже, это пробило себя и в Ubuntu, что я не могу подтвердить напрямую
дата № 2
Доказательство ошибки в Ubuntu, похоже, подтверждается здесь в этом SO Q & A под названием: @reboot cronjob не выполняется .
выдержка
Принятый ответ в этом Q & A также имел этот комментарий:
Дополнительные доказательства
дата № 3
В качестве дополнительного доказательства была эта тема, что кто-то пытался сделать то же самое и разочаровывался, что это не сработало Это называется: Тема: Cron - задания @reboot не работают .
выдержка
Как только этот пользователь выяснил свою проблему, он смог
@reboot
работать с записью crontab пользователя.Я не совсем уверен, какая версия cron используется в Ubuntu, но, похоже, это указывает на то, что пользователь тоже может использовать эту версию
@reboot
или что ошибка была исправлена в какой-то момент в последующих версиях cron.дата № 4
Я протестировал на CentOS 6 следующее, и это сработало.
пример
Затем я перезагрузил систему.
После перезагрузки.
Убирайся
Чтобы узнать больше о том, как работает настоящий механизм,
@reboot
я наткнулся на этот пост в блоге, в котором обсуждаются внутренности. Он называется: @reboot - объясняет простую магию крона .Отладка crond
Вы можете увеличить детализацию
crond
, добавив следующее в этот файл конфигурации на дистрибутивах на основе RHEL / CentOS / Fedora.Допустимые уровни: 0, 1 или 2. Чтобы вернуть этот файл к уровню ведения журнала по умолчанию, просто удалите его,
"-L 2"
когда закончите отладку ситуации.источник
@reboot
нормально в некоторых кронах, и, очевидно, глючит / сломан в других. Отсюда и путаница.@reboot
сработало, как только вы поняли, что оно пытается получить доступ к зашифрованному диску, который еще не был подключен.@reboot sleep 60; <your command>
. Процитирую тему: «Я предполагаю, что директива cron @reboot запускается слишком рано в процессе загрузки»Я обнаружил, что на моей машине с Ubuntu у меня нет доступа к службам dns, но во время @reboot. Это помешало мне подключить удаленные тома. Это банальное, но простое решение сработало:
@reboot sleep 60 && /home/me/bin/mount.sh 2>&1 >> /home/me/reboot.log
(в корне cron; последние части только для отладки)
источник
У меня есть Mac OSX, и у меня была та же проблема, где мой скрипт не работал. но когда я исправил свой сценарий как
это работало хорошо для меня. убедитесь, что ваш файл оболочки является исполняемым, выполнив команду
источник
Я не знаю, если вы уже решили это, или если какой-либо из вышеперечисленных был решением, которое вам нужно, но другая возможность:
если у вас есть каталог / home, зашифрованный, он может быть недоступен до тех пор, пока вы не войдете в систему, то есть он не будет доступен при перезагрузке.
в этом сценарии вы можете переместить свои скрипты в другое место, например / srv или / opt или / usr / local / bin / и т. д.
источник
Возьмите новую установку Ubuntu Gnome 13.10 (по умолчанию пользователь в моем случае: avanderneut).
И увидите, что после перезагрузки файл
/var/tmp/xxx
есть, хотя его не было до перезагрузки.Это было сделано с помощью cron версии 3.0.
Вы должны убедиться, что не используются служебные диски и т. Д., Которые могут быть недоступны во время выполнения сценария. Начните с чего-то простого, подобного описанному выше, и убедитесь, что у него нет вывода терминала, поскольку электронная почта, вероятно, не работает.
Вам также может потребоваться более современный cron (или обновление с oracle-linux), если это не сработало и вам нужна эта функция.
источник
/dev/mapper/VolGroup00-LogVol01
разделе.cron
. ИМХО, вы должны выбрать другой путь, чем crontab & @reboot, чтобы запускать что-то один раз при запуске от имени пользователя.Я бы сказал да на вопрос. Просто были трудности с запуском cron при перезагрузке (Debian 3.10.70) и ему удалось решить с помощью:
@reboot root /usr/bin/python3 /path/to/script
И символ новой строки '\ n' в конце
Это содержимое файла:
Наконец, я думаю, что стоит отметить
man 5 crontab
источник
Прежде всего, вы должны войти в систему как root:
Затем откройте crontab:
После этого добавьте ваш скрипт в crontab как root, как показано ниже:
В результате я увидел, что мой сценарий работает правильно.
Примечание: если вы редактируете crontab с вашим текущим пользователем, перезагрузка не сможет правильно вызвать ваш скрипт.
источник
Prueba:
usuario @ ubuntu: ~ $ touch script.sh usuario @ ubuntu: ~ $ chmod + x script.sh
usuario @ ubuntu: ~ $ $ crontrab -e
@reboot /home/usuario/script.sh
сохранить и перезагрузить компьютер
источник