Запущение скрипта во время начальной загрузки/запуска; init.d по сравнению с кроном @reboot

Да, проблемой является бит suid для касания, и другая команда задач.

- корень rwsr-xr-x 1 базируется 64192 8 января 2012/bin/touch

Хотя мы нашли первопричину, мы должны восстановить целую систему, потому что мы не знаем, сколько двоичного файла затронуты. И мы все еще пытаемся найти то, что вызывает это. Это - только сервер для внутреннего пользования и не публикуется к Интернету.

Спасибо всем за справку.

52
08.01.2018, 03:36
3 ответа

init.D ], также известный как Sysv Script, предназначен для запуска и остановки служб при инициализации системы и отключения. ( /etc/init.d/ Сценарии также выполняются в системах с поддержкой SystemD для совместимости).

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

Crontab (и, следовательно @reboot ).

  • CRON выполнит любую регулярную команду или сценарий, ничего особенного здесь.
  • Любой пользователь может добавить скрипт @REBOOT (не просто root)
  • на системе Debian с Systemd: Cron @reboot выполняется во время multi-user.target .
  • На системе Debian с Sysv (Not Systemd), Crontab (5) Упоминается: Обратите внимание, что запускается, что запуск, насколько @reboot обеспокоен, является временем, когда запуск демона Cron (8). В частности, это может быть до некоторых системных демонов или других объектов, были запущены. Это связано с последовательностью заказа загрузки машины.
  • Легко запланировать один и тот же скрипт при загрузке и периодически.

/etc/rc.local часто считается уродливым или устаренным (по крайней мере, на Redhat ), все же он имел несколько приятных функций:

  • rc.local выполнит любой обычный Команда или скрипт, ничего особенного здесь.
  • На системе Debian с Sysv (не системойD): rc.local был (почти) последней службой для начала.
  • Но на системе Debian с системой Systemd: rc.local выполняется после Network.target по умолчанию (нет Network-online.target !)

Об этом Systemd's Networkget и Network-online.target ,Прочитайте Беговые службы после сети .

39
27.01.2020, 19:33

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

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

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

Q2: что более прочный?

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

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

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

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

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

3
27.01.2020, 19:33

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

  • INIT.D - это каталог, который хранит сценарии управления службами, которые Управляйте началом и остановкой таких услуг, как HTTPD или CRON
  • RC.LOCAL - это услуга, которая обеспечивает работу произвольных сценариев в составе процесса запуска системы

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

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

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

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

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

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

Следует также отметить, что, как правило, скрипты Bash заканчиваются суффиксом .sh , а не .txt , как это немедленно обозначает файл - это оболочка скрипт вместо текстового файла. Это сказано, при условии, что он имеет Shebang ( #! / Bin / bash ) в верхней части файла или называется Bash / путь / к / к // Скрипт. Ктоверь , он не должен иметь значение в терминах выполнения скрипта.

12
27.01.2020, 19:33

Теги

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