これは私のカスタムサービスファイル(elastalert.service)です。
[Unit]
Description=Elastalert
Documentation=https://elastalert.readthedocs.io/en/latest/elastalert.html#configuration
Wants=network-online.target
After=network-online.target
[Service]
Type=Simple
RuntimeDirectory=elastalert
WorkingDirectory=/home/shubham/elastalert
User=shubham
Group=shubham
StandardOutput=journal
StandardError=inherit
TimeoutStartSec=0
ExecStart=/home/shubham/elastalert/startServer.sh
ExecStop=/home/shubham/elastalert/killServer.sh
ExecReload=/home/shubham/elastalert/reloadServer.sh
KillSignal=SIGTERM
PrivateTmp=true
Restart=always
[Install]
WantedBy=multi-user.target
以下は、終了せずに継続的に実行されるstartServer.shスクリプトです。
#!/bin/bash
cd /home/shubham/elastalert
NODE_PATH=. BABEL_DISABLE_CACHE=1 node index.js | ./node_modules/.bin/bunyan -o
実行時にsudo systemctl start elastalert.service
startServer.shスクリプトは実行または返されません。
スクリプトを手動で実行すると機能します。
このコマンドはsudo journalctl -u elastalert.service
何も表示しません。
Centos 7で実行しています。
助けてください。
編集する
起動後、スクリプトは自動的に実行されますが、コマンドはsudo systemctl stop elastalert.service
返されません。
ポート3030で実行されているサーバーを手動でシャットダウンできます。
以下はサーバーを終了するスクリプトです(killServer.sh)。
#!/bin/bash
cd /home/shubham/elastalert
/bin/kill -9 $(lsof -t -i:3030)
rm -f /home/shubham/elastalert/elastalert.pid
ただし、そのコマンドを使用して再起動しようとしてsudo systemctl start elastalert.service
も返されません。
したがって、サーバーを自動的に起動する唯一の方法はVMを再起動することであり、サーバーを停止する唯一の方法はVMをシャットダウンすることです。