終了時に常にpidファイルを削除しないサービスがあります。だから再起動すると失敗します。私のシステムはRHEL 7.2システムであり、私が望むのは、システムが起動する前にファイルを見つけて見つかったら削除することです。 systemctlを使用してこれらすべてを実行する必要があるか、または誰かが実行する前に実行する必要がありますsystemctl start <service>
。使用したいコマンドがありますが、シームレスなプロセスのためにsystemctlと統合する方法がわかりません。これはコマンドです:
[ -f /var/run/dir/file.pid ] && echo "Found and removing" && rm -f /var/run/dir/file.pid || echo "Not Found"
これを/usr/lib/systemd/system/にあるサービスファイルに貼り付けることはできますか?では、どこに置きますか?入力する必要があるファイルの内容。私たちはそれをdns.serviceと呼びます。
[Unit]
Description=DNS daemon
BindTo=dns.service
After=syslog.target network.target dns.service
ConditionPathExists=/etc/dns/dns.conf
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/dns
ExecStart=/usr/sbin/dns -u dns -g dns -f /etc/dns/dns.conf -d -P 17500
Restart=on-abort
[Install]
WantedBy=network.target
これがこれを行う正しい方法だと思いますか、それとも良い方法がありますか?
答え1
カスタムサービスはそのまま維持する必要があります/etc/systemd/system
。
今あなたがやっているのでforking
、私がすることはそのPIDFile=
ディレクティブを使うことです。サービスが停止すると、ファイルは削除されます。しかし起動時にはいいえファイルに書き込みます。それを書くことはあなたのサービスに依存します。推奨される書き込み位置はです/run
。