Один из моих серверов перезагружается каждое воскресенье и утро понедельника, когда сервер включен, мне нужно перезапустить службу. На самом деле я вызываю сценарий для выполнения (каждый раз вручную). Я хочу добиться того, чтобы этот скрипт можно было запускать каждый раз при загрузке сервера. Это возможно?
Сценарий, который я выполняю каждый раз, выглядит примерно так:
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