В настоящее время я пытаюсь понять разницу между init.d
и Cron @reboot
для запуска сценария при запуске / загрузке системы.
Использование @reboot
(этот метод был упомянут в этом форуме по hs.chandra ) является то , что некоторые проще, просто входя в crontab -e
и создавая , @reboot /some_directory/to_your/script/your_script.txt
а затем your_script.txt
будет выполняться каждый раз при загрузке системы. В глубине объяснение @reboot
находится здесь
В качестве альтернативы, встраивая /etc/init.d/your_script.txt
во вторую строку вашего скрипта, т.е.
#!/bin/bash
# /etc/init.d/your_script.txt
Вы можете запустить, chmod +x /etc/init.d/your_script.txt
и это также должно привести your_script.txt
к запуску при каждой загрузке системы.
Q1: Каковы основные различия между ними?
Q2: что является более надежным?
Q3: есть ли лучший из двух?
Q4: это правильный способ встраивания скрипта для запуска во время загрузки?
Я буду включать bash .sh файл для запуска во время запуска.
Ответы:
init.d
Также известный как SysV-скрипт, предназначен для запуска и остановки сервисов во время инициализации и завершения работы системы. (/etc/init.d/
Сценарии также запускаются в системах с поддержкой systemd для совместимости).start
иstop
многое другое (см. Политику Debian )crontab
(и, следовательно,@reboot
).@reboot
скрипт (не только root)multi-user.target
./etc/rc.local
часто считается уродливым или осуждаемым (по крайней мере, redhat ), тем не менее, он имел некоторые приятные особенности:rc.local
был (почти) последним запущенным сервисом.rc.local
выполняется послеnetwork.target
по умолчанию (неnetwork-online.target
!)Что касается systemd
network.target
иnetwork-online.target
, прочитайте Запуск сервисов после запуска сети .источник
/var/run/crond.reboot
каждый раз удалять файл, если я хочу, чтобы задания @reboot cron выполнялись при каждом запуске системы. Если этот файл существует, задания @reboot cron не будут выполненыВо-первых, уточнение в порядке:
httpd
илиcron
С точки зрения того, лучше ли использовать
rc.local
илиcron
запускать сценарий, я подозреваю, что это больше вопрос эстетики, чем практичности.cron
, как планировщик задач, предназначен в качестве метода для обслуживания или обслуживания компьютера, такого как проверка обновлений, очистка кэшей или выполнение проверок безопасности. Это не означает, что он ограничен выполнением этих функций, так как может запускать любой скрипт или команду в указанное время (например,@reboot
).Использование
rc.local
, с другой стороны, в большей степени относится к типу задач конфигурации системы, посколькуrc.local
, будучи выполненным системой init машин, обычно отвечает за настройку конфигурации сети, служб или сред компьютеров (но, опять же, не ограничивается только эта задача).Обе эти точки, однако, должны быть смягчены тем фактом, что не все системы инициализации предлагают
rc.local
механизм, и не все демоны cron предлагают@reboot
тег psuedo.Бонусные очки
Как уже упоминалось,
init.d
это каталог, содержащий сценарии, управляющие службами, которые можно запускать или останавливать в вашей системе (по крайней мере, на компьютерах, использующих системуSysV
типа init). В зависимости от вашей системы инициализации и цели вашего скрипта, может быть целесообразно преобразовать ваш скрипт в скрипт инициализации, который будет запускаться так же, как служба. Это, однако, сильно зависит от вашей системы инициализации, так как среда, в которой создаются эти файлы, может сильно различаться.Последнее слово
Следует также отметить, что обычно сценарии bash заканчиваются суффиксом
.sh
вместо.txt
, поскольку это сразу означает, что файл представляет собой сценарий оболочки, а не текстовый файл. При этом, если у него либо есть shebang (#!/bin/bash
) в верхней части файла, либо он вызывается какbash /path/to/script.whatever
, это не должно иметь значения с точки зрения выполнения скрипта.источник
bash
Сценарии обычно не заканчиваются (и, возможно, не должны) заканчиватьсяsh
расширением..sh
а не.txt
», что означаетsh
более точное определение расширения имени файла для сценариев bash (или других сценариев оболочки), чем то,txt
что обычно обозначает обычный текст. Вы можете использовать любое расширение, которое заставляет вас хихикать, но общее соглашение будет, если использование расширенияsh
будет более подходящим и широко используемым; хотя это не требуется, особенно для сценариев, которые предназначены для выполнения изPATH
.Я пишу свой ответ ниже;
Помимо различий, упомянутых другими пользователями выше, я хотел бы подчеркнуть, что @reboot зависит от демона crond. Вы зависите от порядка запуска crond. Хотя в большинстве случаев, crond запускается нормально, но иногда может не запуститься (по крайней мере, я видел некоторые сбои в некоторых из моих проектов). Когда вы пишете сценарий инициализации, обычно происходит сбой, если вы что-то делаете неправильно в своем сценарии (например, полагаясь на службу, которая будет запускаться после вашей службы)
Исходя из вышеизложенного, я думаю, что init является более надежным. Но есть еще один момент, упомянутый «Франклином Пятом» в первом ответе. Обычно вам нужен скрипт инициализации для демона, и вы должны следовать политике
Я так не думаю (rc.local немного стар и устарел)
Да. Обычно авторы приложений / пакетов делают так.
источник