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/[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
必要に応じてパスを回復します。その後、一般的なコマンドを適用します。
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