Pode iniciar o serviço systemd personalizado, não é possível ativá-lo

2

Eu quero criar um daemon do Telegram-cli ( link ). Eu criei o arquivo /etc/systemd/system/telegram.service com o seguinte conteúdo:

[Service]
Type=simple
KillMode=process
ExecStart=/usr/bin/telegram-daemon

[Install]
WantedBy=default.target

E um arquivo /usr/bin/telegram-daemon com o seguinte conteúdo:

#!/bin/bash
rm -rf /var/run/telegram.sock
cd /root/tg
bin/telegram-cli  -k tg-server.pub -W -s action.lua  -S /var/run/telegram.sock > /dev/null 2>&1 &
exit

Eu posso perfeitamente iniciar este serviço usando systemctl start telegram , posso ativá-lo usando systemctl enable telegram :

 ln -s '/etc/systemd/system/telegram.service' '/etc/systemd/system/default.target.wants/telegram.service'

Quando eu inicio manualmente o servidor e verifico se o telegrama está em execução usando ps aux | grep telegram está em execução:

root      2506  0.0  2.2 359208 22632 ?        S    apr24   1:11 bin/telegram-cli -k tg-server.pub -W -s action.lua -S /var/run/telegram.sock
root      8177  0.0  0.0 112660   964 pts/0    R+   12:11   0:00 grep --color=auto telegram

No entanto, quando eu reinicio, o cli não é iniciado. O status do serviço ( systemctl status -l telegram ) é:

telegram.service
   Loaded: loaded (/etc/systemd/system/telegram.service; enabled)
   Active: inactive (dead) since zo 2015-04-26 12:13:14 UTC; 48s ago
  Process: 393 ExecStart=/usr/bin/telegram-daemon (code=exited, status=0/SUCCESS)
 Main PID: 393 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/telegram.service

apr 26 12:13:14 vultr.guest systemd[1]: Starting telegram.service...
apr 26 12:13:14 vultr.guest systemd[1]: Started telegram.service.

Como posso resolver isso? Observe que também tentei alterar o type para forking . E eu tentei executar diretamente o comando de telegrama do serviço. Na última situação systemctl start telegram continua correndo para sempre.

Obrigado antecipadamente!

p. Estou rodando o Centos 7

EDIT: note que iniciar o serviço no @reboot via crontab tem o mesmo resultado.

    
por LEDfan 26.04.2015 / 14:15

1 resposta

1

Eu consegui resolver isso. Aqui está o arquivo /etc/systemd/system/telegram.service . Note que este é o único arquivo que você precisará.

[Unit]
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
ExecStartPre=/bin/rm -f /var/run/telegram.sock
ExecStart=/root/tg/bin/telegram-cli  -k /root/tg/tg-server.pub -W -s /root/tg/action.lua  -S /var/run/telegram.sock > /var/log/telegram.log &
KillMode=process

ExecStop=/bin/rm -rf /var/run/telegram.sock

[Install]
WantedBy=multi-user.target

Você terá que instalar e compilar o telegrama em / root / tg. Agora você pode iniciá-lo com systemctl start telegram , pará-lo com systemctl stop telegram e habilitá-lo (para que ele seja executado na inicialização) via systemctl enable telegram

Agora você pode começar a enviar mensagens via echo "msg $username $msg" | socat - UNIX-CONNECT:/var/run/telegram.sock . Substitua $ username e $ msg pelos seus valores. Isto pode ser simplificado criando um script bash (coloque-o sob / usr / bin / telegram-msg e faça um chmod +x /usr/bin/telegram-msg

#!/bin/bash
echo "msg $1 $2" | socat - UNIX-CONNECT:/var/run/telegram.sock

Agora você pode enviar mensagens de telegrama via telegram-msg $username $msg .

    
por 26.04.2015 / 15:06