如何将我的 bash 脚本作为 CentOS 7 中的服务?以下失败。
$ 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 &
答案1
正确地做。
- 不要
forever
在服务经理下使用。他们已经这样做了。 - 不要在服务管理器下使用
pgrep
和。kill
他们在这方面做得更好。 - 不要
start-stop-daemon
在服务经理下使用。他们在这方面做得更好。
使用该 shell 脚本的整个机制一开始就是错误的,修复其就绪协议不匹配只是简单地掩盖了一些巨大的漏洞。您根本不需要任何整个拼凑在一起的可怜的守护进程管理脚本。你有可以做这些事情的服务经理直接地和安全地。用它。
# /etc/systemd/系统/[电子邮件受保护] [单元] 描述=%i.js 的节点服务 文档=https://unix.stackexchange.com/questions/207658/ 之后=网络.目标 [服务] 类型=简单 ExecStart=/usr/local/bin/node /home/www/html/%i.js 重新启动=中止时 SyslogIdentifier=节点-%i [安装] WantedBy=多用户.target
/usr/local/bin/node
根据需要修复路径。然后应用常用命令:
systemctl preset [email protected] [email protected]
systemctl start [email protected] [email protected]
systemctl status [email protected] [email protected]
进一步阅读
- 费利克斯·萨帕雷利 (2013-11-26)。如何使用 Systemd 和 Nginx 部署 Node.js 应用程序。
- 鲁本·维米尔施 (2013-01-16)。使用 systemd 部署 Node.js。
- https://unix.stackexchange.com/a/200365/5132
- https://askubuntu.com/a/625378/43344