CentOS 7 - por que o arquivo de serviço não está funcionando para executar o meu script bash?

1

Como fazer meu script bash como serviço no CentOS 7? seguinte está falhando.

$ cat /etc/systemd/system/mybash.service
[Unit]
Description=mybash Service
After=network.target

[Service]
Type=simple
User=root
ExecStart=/root/runme.sh
Restart=on-abort

[Install]
WantedBy=multi-user.target

$ systemctl start mybash
$ systemctl status mybash -l
mybash.service - mybash Service
   Loaded: loaded (/etc/systemd/system/mybash.service; disabled)
   Active: inactive (dead)
.....

$ cat /root/runme.sh 
#!/bin/bash
echo "Start the node server"
a=$(pgrep -f "a.js");
kill $a;
a=$(pgrep -f "b.js");
kill $a;
node /home/www/html/a.js &
node /home/www/html/b.js &
    
por YumYumYum 05.06.2015 / 02:18

1 resposta

5

Faça corretamente.

  • Não use forever em gerenciadores de serviços. Eles já fazem isso.
  • Não use pgrep e kill em gerenciadores de serviços. Eles fazem isso melhor.
  • Não use start-stop-daemon em gerenciadores de serviços. Eles fazem isso melhor.

Todo esse mecanismo com esse script de shell é errado para começar, e consertar sua incompatibilidade de protocolo de prontidão seria simplesmente passar por cima de algumas grandes falhas. Você não precisa de nenhum script de gerenciamento todo-compilado-pobre-imitação-daemon. Você tem um gerenciador de serviços que pode fazer isso diretamente e com segurança . Use-o.

# /etc/systemd/system/[email protected]
[Unit]
Description=node service for %i.js
Documentation=https://unix.stackexchange.com/questions/207658/
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/node /home/www/html/%i.js
Restart=on-abort
SyslogIdentifier=node-%i

[Install]
WantedBy=multi-user.target

Corrija o caminho para /usr/local/bin/node conforme apropriado. Os comandos usuais então se aplicam:

Leitura adicional

por 05.06.2015 / 13:39