
私はできるだけ多くのsysvinitシステムで実行できるクロスプラットフォームのsysvinitサービスを作成しようとしています。
私に必要なもの:
プロセスにデーモンが必要です(実行時に自動的にデーモン化されません)。
競合が発生した場合は、プロセスを再起動する必要があります。
コマンドを使用してstart-stop-daemon
デーモンを実装しましたが、これが常に存在するわけではないことを理解しています。start-stop-daemon
クロスプラットフォーム機能を実装するより標準的な方法はありますか?
また、競合が発生した場合は、プロセスが自動的に再起動されることを確認する必要があります。これを達成するための最良のクロスプラットフォーム方法は何ですか?
update-rc.d
コマンドが常に存在しないことも可能ですか?それでは、代わりに何を使うべきですか?
これは私のsysvinitスクリプトです。https://gist.github.com/banister/40775de6a3778e1439d2f776d290073d
ありがとうございます!
答え1
一つできるrc
これを行うには、van Smoorenburgスクリプトを作成してください。それらは最終的にスクリプトの各個々の段階の構成になりますcase
。esac
これはメンテナンス不可能です。
これはこのメカニズムの既知の問題の1つです。
それに加えて、van Smoorenburgrc
スクリプトは長年にわたってUbuntuとFedoraで作業を行う方法ではありませんでした。どちらの場合も、systemdを使用する前にUpstartがありました。実際、rc
Arch Linuxではsystemdのvan Smoorenburg互換性がオフになっています。 van Smoorenburgrc
スクリプトを、誰もが実行できる一種の一般的な最小値と考えてください。補助コマンドの変更も無視します。完全な間違いです。あなたの目標は間違っています。
すべてのバージョンに対して単一のスクリプトを作成するときに満たす必要がある広範な違いの概要を取得するには、2014年からrc
van Smoorenburgスクリプトを作成するDebianの方法が次のように文書化されていることを検討してください。
#!/lib/init/init-d-script ## 初期化情報の開始 #提供:myvpn #必須起動:$ network $ local_fs $ remote_fs # 停止する項目: $network $local_fs $remote_fs #基本スタート:2 3 4 5 #基本停止:0 1 6 #簡単な説明:私のVPNサービス #説明:このスクリプトはMY VPNデーモンプロセスを起動します。 ### 初期化情報の終了 DAEMON=/opt/myvpn/bin/myvpn-デーモン 名前= myVPN LD_LIBRARY_PATH エクスポート=/opt/myvpn/lib
これはスクリプトよりはるかに短く、追加のコンテンツのためのスペースがあります。おおよそのシステム化されたサービスユニットを例に挙げます。
% 猫 myvpn.service [単位] 説明=MyVPNサービス [提供する] ExecStart=/opt/myvpn/bin/myvpn-daemon 環境=LD_LIBRARY_PATH=/opt/myvpn/lib 再起動=常に [インストールする] WantedBy =マルチユーザー。ターゲット %
...変換して...
%SystemControlTranslation systemd-units --no- Generation-comment ./myvpn.service %
...daemontoolsサービス定義スイート(この場合はnoshツールセットを使用)がどのように見えるかを示します。
%システム制御印刷サービススクリプト。/ myvpn 開始: #!/bin/nosh 開始:事実 停止: #!/bin/nosh 停止:事実 実行: #!/bin/nosh 実行:#myVPNService 実行:制御グループ../myvpn.serviceに移動します。 実行:getuidgid 実行:userenv-fromenv 実行:setenv LD_LIBRARY_PATH /opt/myvpn/lib 実行: chdir/ 実行:/opt/myvpn/bin/myvpn-daemon 再起動: #!/bin/sh 再起動:スリープ0.1 restart:exec true#スクリプトパラメータを無視します。 %
Daemontools Service ManagerスイートはLinuxではなくオペレーティングシステムで実行でき、自動再起動はこの世界のデフォルト設定でもあります。
追加読書
- /etc/init.d/bonesはどこにありますか?
- https://unix.stackexchange.com/a/202731/5132
- ジョナサンデボインポラード(2015)。システム5の既知の問題
rc
。よく与えられる答えです。