正しくしてください。

正しくしてください。

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では、およびを使用しないでくださいpgrepkill彼らはこれにもっと堪能です。
  • start-stop-daemonサービスマネージャでは使用しないでください。彼らはこれにもっと堪能です。

そのシェルスクリプトを使用する完全なメカニズムは最初から間違っており、準備プロトコルの不一致を修正するといくつかの大きな穴が隠されていました。この厳しいデーモン管理スクリプト全体は必要ありません。あなた持つこのようなことができるサービスマネージャまっすぐそして安全に。それを書いてください。

# /etc/systemd/system/[Eメール保護]
[単位]
説明=%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必要に応じてパスを回復します。その後、一般的なコマンドを適用します。

追加読書

関連情報