Melhor maneira de iniciar vários scripts de “tela” após o reinício? (centos)

0

Estamos usando o centos. Assim que o servidor for reiniciado e o sistema operacional estiver totalmente carregado, gostaríamos que um determinado usuário ("foo") iniciasse três ou quatro scripts com a tela.

Por exemplo,

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

Qual é a melhor maneira de conseguir isso usando o CentOS? Eu preferiria evitar ter que cavar muito o init.d

Usando o systemd, tento inspecionar o serviço ("notificar") e ver isto:

   Loaded: loaded (/etc/systemd/system/[email protected]; 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)

Por que está ficando parado? Como posso começar a depurar isso?

    
por Zack Burt 20.03.2016 / 18:22

2 respostas

2

Como este é o CentOS 7, você deve usar um serviço systemd para iniciar o serviço. Você pode até tê-lo executado dentro de uma tela. Do wiki do archlinux :

Crie um arquivo: /etc/systemd/system/[email protected]

[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

Em seguida, habilite-o com systemctl enable [email protected] Se você não planeja fazê-lo para que possa ser executado sob qualquer usuário, você pode se livrar do @ no nome do arquivo e do @USERNAME no nome da unidade ao habilitá-lo e codifique o usuário no arquivo da unidade.

    
por 20.03.2016 / 19:25
0

Eu editei /etc/rc.local e adicionei isso

/etc/init.d/start_bg_scripts

Em seguida, adicionei /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

O --minUptime 1 e --spinSleepTime 1 significa que eles continuam tentando se reconectar até que o restante dos serviços do sistema (por exemplo, mysqld) esteja disponível

    
por 20.03.2016 / 20:54