Задание Crontab начинается через 1 минуту после @reboot


45

Нужен скрипт, выполняемый при каждой перезагрузке за +1 минуту. Я разместил запись, @rebootно это слишком рано для моего сценария. Как выполнить это когда-нибудь после перезагрузки?


3
Почему так рано ? Может быть, сценарий инициализации был бы более подходящим (с учетом зависимостей, например, этот сценарий должен быть настроен в первую очередь для настройки сети )?
sr_

Мой сценарий должен быть выполнен после всех остальных, последнее короткими словами
Yurij73

так как ваша работа должна выполняться после всего и поскольку концепция всего достаточно изменчива (добавление нового приложения autostart @ reboot не так уж и редко), я думаю, что вы должны поместить свою работу в сценарии rc в Таким образом, серверы вашей цели. Помещение вашей задачи в конец задач, указанных в /etc/rc.local, обычно является тем, что вы хотите, но в зависимости от конфигурации загрузки вашей системы, это может не выполняться всегда. Итак, проверьте это и посмотрите, работает ли он для вас.
MelBurslan

Похоже, дело в Upstart?
Nafg

Ответы:


69

Сценарий предназначен для запуска только через одну минуту после загрузки или может использоваться в другое время? В первом случае вы можете добавить sleep 60в начало вашего скрипта, или во втором случае добавить его в файл crontab:

@reboot sleep 60 && my_script.sh

Как уже указывалось sr_, возможно, вы решаете эту проблему неправильно, и правильный сценарий init.d или rc.d был бы более надежным решением.


1
Или используйте параметр командной строки, чтобы настроить задержку (например, script -s Xкоторая будет переводиться sleep Xвнутрь скрипта).
Петер

Могу ли я применить это к файлу taskrunner в /etc/init.d/?
Андрес Анхель

@AndresAngel - прости, я не знаю. Я использую FreeBSD, который не имеет taskrunner, и, в этом отношении,/etc/init.d
D_Bye

на моем rhel7 сон вообще не работает, он спит вечно и никогда не возвращается.
Inder R Singh

15

Например, если вам нужно выполнить что-то после перезагрузки, когда сеть станет доступной, вы можете написать системный модуль, который будет выполняться в нужное время (конечно, это будет работать только в системах с systemd).

Для этого создайте файл /etc/systemd/system/my_script.serviceсо следующим содержимым:

[Unit]
Description=My script that requires network
After=network.target

[Service]
Type=oneshot
ExecStart=/full/path/to/my_script.sh

[Install]
WantedBy=multi-user.target

Затем выполните:

sudo systemctl daemon-reload
sudo systemctl enable my_script

Вы сделали!


11

Я бы использовал at. Как в:

@reboot echo /root/bin/do_the_stuff | at now + 2 minutes
# at assigns it an execution time truncated to whole minutes,
# so this means it will execute in 1--2 minutes.

... с добавленной оговоркой, что если вы действительно хотите запустить его после всех остальных вещей, вы должны проверить, как это сделать в init, который использует ваша ОС.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.