可以启动自定义 systemd 服务,但无法启用它

可以启动自定义 systemd 服务,但无法启用它

我想创建一个 Telegram-cli 守护进程(https://github.com/vysheng/tg)。我创建了/etc/systemd/system/telegram.service包含以下内容的文件:

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

[Install]
WantedBy=default.target

/usr/bin/telegram-daemon以及一个包含以下内容的文件:

#!/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

我可以使用以下命令完美启动此服务systemctl start telegram,我可以使用以下命令启用它systemctl enable telegram

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

当我手动启动服务器并检查电报是否正在使用ps aux | grep telegram它正在运行时:

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

但是当我重新启动时,cli 没有启动。服务 ( 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.

我该如何解决这个问题?请注意,我还尝试将 更改typeforking.我尝试直接从服务运行 telegram 命令。在最新情况下,systemctl start telegram永远保持运行。

提前致谢!

PS我运行的是Centos 7

编辑:请注意,通过 crontab 在 @reboot 启动服务具有相同的结果。

答案1

我设法解决了这个问题。这是/etc/systemd/system/telegram.service文件。请注意,这是您需要的唯一文件。

[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

您必须在 /root/tg 下安装并编译 telegram。现在您可以使用 启动它systemctl start telegram,使用 停止它systemctl stop telegram并启用它(这样它将在启动时运行)通过systemctl enable telegram

现在您可以开始通过 发送消息echo "msg $username $msg" | socat - UNIX-CONNECT:/var/run/telegram.sock。将 $username 和 $msg 替换为您的值。这可以通过创建 bash 脚本来简化(将其放在 /usr/bin/telegram-msg 下并执行chmod +x /usr/bin/telegram-msg

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

现在您可以通过 发送电报消息telegram-msg $username $msg

相关内容