Лучший способ запуска нескольких скриптов "экрана" после перезапуска? (centos)

Мы используем centos. Как только сервер будет перезапущен и ОС полностью загружена, мы хотели бы, чтобы определенный пользователь ("foo") запустил три или четыре скрипта с помощью screen.

Например,

screen -d -m -S script1 forever -o script1.log -e script1.log -l script1.log -c php /path/to/script1.php

Какой лучший способ достичь этого, используя CentOS? Я бы предпочел не копаться в init.d слишком много.

Используя systemd, я пытаюсь проверить службу ("notify") и вижу следующее:

   Loaded: loaded (/etc/systemd/system/notify@.service; enabled)
   Active: failed (Result: exit-code) since Sun 2016-03-20 15:08:04 EDT; 14s ago
  Process: 1690 ExecStop=/usr/bin/screen -S notify -X quit (code=exited, status=1/FAILURE)
  Process: 941 ExecStart=/usr/bin/screen -d -m -S notify forever -o notifyout.log -e notifyerr.log -l notifyforever.log -c php /path/to/script/notify.php (code=exited, status=0/SUCCESS)
 Main PID: 946 (code=exited, status=0/SUCCESS)

Почему она остановлена? Как я могу начать отлаживать это?

0
20.03.2016, 21:10
2 ответа

Поскольку это CentOS 7, вы должны использовать службу systemd для запуска службы. Вы даже можете запустить его внутри экрана. Из archlinux wiki:

Создайте файл: /etc/systemd/system/screen@.service

[Unit]
Description=screen
After=network.target

[Service]
Type=simple
User=%i
ExecStart=/usr/bin/screen -DmS autoscreen
ExecStop=/usr/bin/screen -S autoscreen -X quit

[Install]
WantedBy=multi-user.target

Затем включите его командой systemctl enable screen@USERNAME.service Если вы не планируете делать так, чтобы его можно было запускать под любым пользователем, вы можете избавиться от @ в имени файла и @USERNAME в имени блока при его включении, и жестко ввести пользователя в файл блока.

2
28.01.2020, 02:35

Я отредактировал /etc/rc.local и добавил следующее

/etc/init. d/start_bg_scripts

Затем я добавил /etc/init.d/start_bg_scripts:

#!/bin/bash
/usr/bin/screen -d -m -S script1 forever --minUptime 1 --spinSleepTime 1 -o script1out.log -e script1err.log -l script1forever.log -c php /path/to/script.php

The --minUptime 1 and --spinSleepTime 1 means that they keep trying to reconnect until the rest of the system services (e.g. mysqld) become available

0
28.01.2020, 02:35

Теги

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