Запуск скрипта во время загрузки /запуска; init.d vs cron @reboot

В настоящее время я пытаюсь понять разницу между 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 для запуска во время запуска.

39 голосов | спросил 3kstc 4 MaramWed, 04 Mar 2015 04:38:24 +03002015-03-04T04:38:24+03:0004 2015, 04:38:24

3 ответа


31

init.d , также известный как скрипт SysV, предназначен для запуска и остановки служб во время инициализации системы и неисправность. ( ---- +: = 1 =: + ----) также работают в системах с поддержкой systemd для совместимости).

  • Сценарий выполняется во время загрузки и выключения (по умолчанию).
  • Скрипт должен быть скриптом init.d, а не только скриптом. Он должен поддерживать /etc/init.d/ и start и более (см. политика Debian )
  • Сценарий можно выполнить во время загрузки системы (вы можете определить, когда).

stop (и поэтому crontab).

  • cron выполнит любую регулярную команду или скрипт, здесь ничего особенного.
  • любой пользователь может добавить скрипт @reboot (а не только root)
  • в системе Debian с systemd: @reboot cron выполняется во время @reboot.
  • в системе Debian с SysV (not systemd), crontab (5): Обратите внимание, что при запуске, начиная с @reboot, запускается запуск демона cron (8). В частности, это может быть до запуска некоторых системных демонов или других объектов. Это связано с порядком последовательности загрузки машины.
  • легко запланировать тот же скрипт при загрузке и периодически.

multi-user.target часто считается уродливым или устаревшим (по крайней мере, redhat ), но у него были некоторые приятные функции:

  • rc.local выполнит любую регулярную команду или скрипт, здесь ничего особенного.
  • в системе Debian с SysV (не systemd): /etc/rc.local был (почти) последний запуск службы.
  • , но в системе Debian с systemd: rc.local выполняется после rc.local по умолчанию (не network.target!)

Относительно системного кода network-online.target и network.target , прочитайте Запуск служб после того, как сеть вернулась .

ответил Franklin Piat 8 MaramSun, 08 Mar 2015 05:51:17 +03002015-03-08T05:51:17+03:0005 2015, 05:51:17
9

Во-первых, пояснение в порядке:

  • init.d - это каталог, в котором хранятся сценарии управления службами, которые управляют запуском и остановкой служб, таких как httpd или cron
  • rc.local - это служба, которая позволяет запускать произвольные сценарии как часть процесса запуска системы.

С точки зрения того, лучше ли использовать rc.local или cron, чтобы запустить ваш скрипт, я подозреваю, что это скорее вопрос эстетики, а не практичность. cron, как планировщик задач, предназначен как метод для обслуживания или поддержки на машине, такой как проверка обновлений, очистка кэшей, или проведения проверок безопасности. Это не означает, что он ограничен выполнением этих функций, так как он может запускать любой скрипт или команду, требуемые в указанное время (например, @reboot).

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

Однако оба эти момента должны быть смягчены тем фактом, что не все системы инициализации предлагают механизм rc.local, и не все Демоны cron предлагают тег psuedo @reboot.

Бонусные баллы

Как уже упоминалось, init.d - это каталог, содержащий скрипты, которые управляют службами, которые могут быть запущены или остановлены в вашей системе (по крайней мере на машинах, использующих систему init SysV). В зависимости от вашей системы инициализации и цели вашего сценария может быть разумным преобразовать ваш скрипт в сценарий init , который будет выполняться таким же образом, как и для службы. Это, однако, сильно зависит от вашей системы инициализации, поскольку структура, окружающая то, как эти файлы построены, может сильно различаться.

Последнее слово

Следует также отметить, что обычно скрипты bash заканчиваются суффиксом .sh, а не .txt, так как это сразу означает, что файл представляет собой сценарий оболочки вместо текстового файла. При этом, если он либо имеет shebang (#!/bin/bash) в верхней части файла, либо называемый bash /path/to/script.whatever, это не имеет значения с точки зрения выполнения сценария.

ответил wraeth 5 MarpmThu, 05 Mar 2015 14:36:51 +03002015-03-05T14:36:51+03:0002 2015, 14:36:51
2

Я пишу свой ответ ниже;

  
    

Q1: Каковы основные различия между ними?

  

Помимо различий, упомянутых другими пользователями выше, я хотел бы подчеркнуть, что @reboot зависит от демона crond. Вы зависите от порядка, в котором начинается сбой. Несмотря на то, что в большинстве случаев коронка начинается нормально, но иногда может закончиться неудачно (по крайней мере, я видел некоторые сбои в некоторых моих проектах). Когда вы пишете сценарий инициализации, сбой обычно возникает, если вы делаете что-то не так в своем скрипте (например: полагаясь на услугу, которая начнется после вашего обслуживания)

  
    

Q2: Что более надежное?

  

Основываясь на выше, я думаю, что init более надежный. Но есть еще один момент, о котором упоминал «Франклин Пят» в первом ответе. Обычно вам нужен скрипт init для демона, и вы должны следовать политике

  
    

Q3: Есть ли лучший из двух?

  

Я так не думаю (rc.local немного устарел и устарел)

  
    

Q4: Является ли это правильным способом встраивания скрипта во время загрузки?

  

Да. Обычно разработчики приложений /пакетов делают это.

ответил shubham 1 AMpWed, 01 Apr 2015 09:02:34 +030002Wednesday 2015, 09:02:34

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132