Робота із Crontab розпочинається через 1 хв після @reboot


44

Потрібен сценарій, виконаний при кожному перезавантаженні за +1 хвилину. Я розмістив запис, @rebootале для мого сценарію поки рано. Як виконати його десь після перезавантаження?


3
Чому ще рано ? Можливо, сценарій init буде більш підходящим (залежно від залежностей, наприклад, цей сценарій потребує налаштування мережі в першу чергу )?
sr_

мій сценарій потрібно виконати після всіх інших, останній короткими словами
Yurij73

оскільки ваша робота повинна бути виконана після всього і оскільки концепція всього досить мінлива (додавання нової програми для автоматичного запуску @ reboot не так вже й рідкість), я думаю, що саме вам належить помістити свою роботу в сценарії rc в таким чином, що сервери вашого призначення. Поставити завдання внизу завдань, зазначених у /etc/rc.local, зазвичай це те, що ви хочете, але залежно від конфігурації системи запуску, це може бути неправдивим весь час. Отож, протестуйте його і перевірте, чи працює він для вас.
Мельбурслан

Звучить як випадок для Upstart?
нафг

Відповіді:


67

Чи сценарій призначений для запуску лише одну хвилину після завантаження, чи його можна використовувати і в інші часи? У першому випадку ви можете додати 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 сон взагалі не працює, він вічно спить і ніколи не повертається.
Індер Р Сінгх

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.

... з доданим згаданим застереженням, що якщо ви дійсно хочете, це запустити його після всіх інших речей, ви повинні перевірити, як це зробити в ініціаті, який використовує ваша ОС.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.