CentOS 7에서 bash 스크립트를 서비스로 만들려면 어떻게 해야 합니까? 다음은 실패합니다.
$ 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
서비스 관리자에서는 사용 하지 마십시오 . 그들은 이미 이것을 하고 있습니다.- Service Manager에서는 및 를 사용하지 마십시오
pgrep
.kill
그들은 이것에 더 능숙합니다. start-stop-daemon
서비스 관리자에서는 사용 하지 마십시오 . 그들은 이것에 더 능숙합니다.
해당 쉘 스크립트를 사용하는 전체 메커니즘은 처음부터 잘못되었으며 준비 프로토콜 불일치를 수정하면 몇 가지 큰 구멍이 가려졌습니다. 이 한심한 데몬 관리 스크립트 전체가 필요하지 않습니다. 너가지다이런 일을 할 수 있는 서비스 매니저곧장그리고안전하게. 그걸 써.
# /etc/systemd/system/[이메일 보호됨] [단위] 설명=%i.js에 대한 노드 서비스 문서=https://unix.stackexchange.com/questions/207658/ 이후 = network.target [제공하다] 유형=단순 ExecStart=/usr/local/bin/node /home/www/html/%i.js 다시 시작할 때 = 중단 SyslogIdentifier=노드-%i [설치하다] WantedBy=다중 사용자.대상
/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