
私はDebian Jessieを使用していますが、init.dでいくつかのスクリプト(起動、停止、再起動)を使用しようとしています。一部の関数はlog_failure_msg
log_daemon_msg
log_end_msg
標準出力から何かを提供する必要がありますが、そうではありません。以前のバージョンの Debian ではうまくいったことを覚えています。失敗したスクリプトを使用しようとしても、常に同じ出力を取得します。
kuban@lenovo-y510p:/etc/init.d$ sudo /etc/init.d/parstart 再起動
[ ok ] parstartを再起動します(systemctl経由):parstart.service。
答え1
init.d
[...]の一部のスクリプトを使用しようとしています。
/etc/init.d/
スクリプトを直接実行しないでください。
システムオペレーティングシステムでは、これらのスクリプトがあなたのサービスに固有のスクリプトであることはもちろん、存在するという保証もありません。 Debian 7には、System 5スクリプトを置き換えたsystemdデバイスもありますrc
。 Debian 8ではさらにそうです。使用する正しいコマンドは次のとおりです。
systemctl
および対応するサブコマンドstatus
、、、、およびstart
stop
enable
disable
service
update-rc.d
そしてinvoke-rc.d
、しかし、パッケージマネージャスクリプトの場合にのみ適用されます。
これがまさにあなたに起こったことです。スクリプトへの直接呼び出しは、広く使用されているDebianスクリプトライブラリのフックを介した呼び出し(この場合)に置き換えられます。
systemctl 再起動 parstart.service
前の出力でもこれを確認できます。それは(via systemctl): parstart.service
私の意味です。確かに失敗からは遠い成功サービスを再起動するようにsystemdに指示します。
スクリプトのインタラクティブな鐘と口笛rc
(カラーメッセージを含む)は機能しなくなりました。サービスがサブプロセスとして実行されていませんsystemctl
。これは子プロセスとして実行され、systemd
インタラクティブにコマンドを実行する端末への接続はありません。
それにもかかわらず、これらの/etc/szarp/parstart.cfg
スキャフォールディングとログメッセージの生成はすべてsystemdには必要ありません。 systemdは、サービスを有効化および無効化し、自動的に再起動するためのサービス間メカニズムを提供します。サービスにそれを行わずにサービスが開始および停止される時期を記録します。私の計算によると、このスクリプトはサービスごとに1つずつ、rc
16の一般単位に簡単に置き換えることができます。.service
その様子は以下の通りです。
[単位] 説明=SZARP pserver-liteサーバー 以降 = network.target [提供する] タイプ=シンプル ExecStart=/usr/local/bin/pserver-lite --no-daemon [インストールする] WantedBy =マルチユーザー。ターゲット
呼び出して/usr/local/etc/systemd/system/pserver-lite.service
、実行systemctl daemon-reload
して...
- ...利用可能なステータス情報があります
systemctl status pserver-lite.service
。 - ...を使用してブートローダで実行することができます
systemctl enable pserver-lite.service
。 - ....を使用して、systemdの開始および停止ログエントリを表示できます
journalctl
。
残りの15人にはほぼ簡単でした。
追加読書
- https://unix.stackexchange.com/a/233840/5132
- ウェイドリー、スティーブン(2014)。 「8. systemd を使用したサービスの管理」 Red Hat Enterprise Linux 7 システム管理者ガイド。赤い帽子。
- レナート・ペトリング(2013-10-07)。
systemctl
。システムのマニュアルページ。 freedesktop.org.