Назад | Перейти на главную страницу

Выполнить сценарий при загрузке в RHEL7

Один из моих серверов перезагружается каждое воскресенье и утро понедельника, когда сервер включен, мне нужно перезапустить службу. На самом деле я вызываю сценарий для выполнения (каждый раз вручную). Я хочу добиться того, чтобы этот скрипт можно было запускать каждый раз при загрузке сервера. Это возможно?

Сценарий, который я выполняю каждый раз, выглядит примерно так:

cd /var/www/activefolder/current && RAILS_ENV=production script/delayed_job start

Как видите, этот скрипт объединяет две задачи для завершения.

Серверная ОС - Redhat EL 7. Думаю, до 6 ОС использовала init.d, тогда как RHEL7 вводит более гибкую опцию под названием systemd. Но не уверен, можно ли настроить, как я уже упоминал. Любая помощь могла бы быть полезна.

Не уверен, что я дал вам все требования, чтобы ответить на этот вопрос. Если нет, не стесняйтесь спрашивать, и я дополню свой вопрос соответствующей информацией.

На основе документации Redhat Создание файлов пользовательских модулей и systemd.exec - Конфигурация среды выполнения:

Не тестировалось ™

Создайте файл (рекомендуется нажать> chmod> edit, я не знаю почему):

touch /etc/systemd/system/activefolder.service
chmod 664 /etc/systemd/system/activefolder.service
vim /etc/systemd/system/activefolder.service

/etc/systemd/system/activefolder.service пример:

[Unit]
Description=activefolder
After=network.target

[Service]
WorkingDirectory=/var/www/activefolder/current
ExecStart=/var/www/activefolder/current/script/delayed_job start
Type=forking
PIDFile=/run/activefolder.pid
Environment="RAILS_ENV=production"
#User=httpd
#Group=httpd

[Install]
WantedBy=default.target

Затем:

systemctl daemon-reload
systemctl start name.service

Вам не нужно создавать службу systemd для запуска команды при загрузке, это можно сделать с помощью crontab.

Просто добавьте команду, которую нужно запустить с @reboot <user_name> префикс к вашему /etc/crontab

В вашем случае это будет:

@reboot root cd /var/www/activefolder/current && RAILS_ENV=production script/delayed_job start

Протестировано для работы в CentOS 6/7 (требуется vixie-cron, может не работать с cronie)

Добавление команд в конце /etc/rc.local все еще кажется, что работает.

(Однако убедитесь, что он исполняемый.)

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

В зависимости от того, что нужно выполнить вашему коду, вам может потребоваться запустить его после запуска данной службы или до того, как это сделает другая. В некоторых случаях просто поместить его в /etc/rc.local недостаточно. Если вам нужен больший контроль над тем, как ваш код выполняется из-за его собственной природы, вам нужно будет понять, как запускаются сценарии инициализации, какие уровни выполнения и т. Д. Это хорошие места для начала:

Для систем на основе init (RHEL <7): https://www.linux.com/news/introduction-services-runlevels-and-rcd-scripts

Для систем systemd (RHEL> = 7): http://0pointer.de/blog/projects/systemd-for-admins-1.html