올바르게 하세요.

올바르게 하세요.

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필요에 따라 경로를 복구합니다. 그런 다음 일반적인 명령을 적용합니다.

추가 읽기

관련 정보