Мы используем 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)
Почему она остановлена? Как я могу начать отлаживать это?
Поскольку это 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 в имени блока при его включении, и жестко ввести пользователя в файл блока.
Я отредактировал /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