
私はaaa.service
JBossを制御するファイルを持っていますが、そこには他の通常のものに加えて、
[Service]
Type=forking
ExecStart=/my/script start
ExecReload=/my/script restart
ExecStop=/my/script stop
PIDFile=...
/my/script start
PID ファイルを作成し、service aaa status
奇妙な警告を表示します。
Supervising process xxx which is not our child. We'll most likely not notice when it exits.
フル出力:
Loaded: loaded (/etc/systemd/system/aaa.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2019-01-22 20:55:16 CET; 34min ago
Process: 32435 ExecStart=/my/script start (code=exited, status=0/SUCCESS)
Main PID: 32542
Tasks: 0 (limit: 512)
CGroup: /system.slice/aaa.service
Jan 22 20:54:56 I011-830 su[32447]: (to aaa) root on none
Jan 22 20:54:56 I011-830 su[32447]: pam_unix(su-l:session): session opened for user aaa by (uid=0)
Jan 22 20:55:16 I011-830 aaa[32435]: Starting JBoss application server: Starting JBoss application server:
Jan 22 20:55:16 I011-830 systemd[1]: aaa.service: Supervising process 32542 which is not our child. We'll most likely not notice when it exits.
私の実際の問題は、 を発行する以外の方法でプロセスが強制終了された場合service aaa stop
、systemd がそれを検出しないことです。さらに、プロセスは実行中であり、再起動したくないと主張します。
# cat <pid-file>
No such file or directory
# service aaa status
Loaded: loaded (/etc/systemd/system/aaa.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2019-01-22 20:55:16 CET; 40min ago
Process: 32435 ExecStart=/konsens/app/aaa/init/aaastart (code=exited, status=0/SUCCESS)
Main PID: 32542
Tasks: 0 (limit: 512)
CGroup: /system.slice/aaa.service
...
# service aaa start
# <--- Instant return, no process started
次の目標を達成するにはどうすればよいでしょうか?
- systemdはサービスを開始および停止できるはずです
service aaa status
systemdによって開始されたか手動で実行されたかに関係なく、プロセスのステータスが表示されます。/my/service start
- systemdは手動で強制終了された後でもサービスを開始できるはずです
- systemdは手動で開始したサービスを停止できるはずです
答え1
以下の目標を達成するにはどうすればいいでしょうか? 1 systemdはサービスを開始および停止できる必要があります
ほとんどのディストリビューションには下位互換性があるため、ネイティブ サービスを作成したくない場合は、サービスを /etc/init.d/ に保存できます。
2 service aaa statusは、systemdによって開始されたか、手動で/my/service startを発行したかに関係なく、プロセスのステータスを表示します。
これを行う 1 つの方法は、systemctl start aaa.service
最初にその方法で呼び出されなかった場合に を呼び出すためのチェックをスクリプトに追加することです。トラップは終了に使用できます。
3 systemdは手動で強制終了された後でもサービスを開始できるはずです
#2 によって解決されました
4 systemdは手動で開始したサービスを停止できるはずです
#2 によって解決されました