次の起動スクリプトがあります。これをシステムサービスに変換するにはどうすればよいですか?
description "x11vnc"
start on runlevel [2345]
stop on runlevel [^2345]
#console log
respawn
respawn limit 20 5
exec /usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /root/.vnc/passwd -rfbport 5900 -shared
答え1
upstart構成の一部の構成オプションは、systemdユニットディレクティブに直接変換できます。こんなことが起こるdescription
(これになるDescription=
)そしてexec
(なるExecStart=
.)
expect fork
起動設定にはdaemon
セクションまたは(変換された)セクションがないため、systemdデバイスをType=forking
使用する必要があります。Type=simple
残りのセクションを見てみましょう。
start on runlevel [2345]
stop on runlevel [^2345]
これは、本質的にシステムが起動したときにサービスが開始され、システムがシャットダウンしたときに停止する必要があることを意味します。 systemdでは、それをインストールし、エンドデバイスのセクションをmulti-user.target
参照して実行されます。[Install]
#console log
これはコメントアウトされていますが、以下を使用してシステムデバイスで同様の設定を制御できます。StandardOutput=
そして関連オプション。
upstartでは、console logged
ログに出力を送信するシステムのデフォルト値とある程度一致するデフォルト値です(ログはシステムの世界の主要なロガーであるため)。
respawn
respawn limit 20 5
したがって、最初の行はサービスの再起動を要求します。予期せず終了した場合、私はこれが次のように解釈されると信じています。Restart=on-failure
(ただし、常に再起動する)は、おそらくRestart=yes
ここでupstartが実行する作業に近づくでしょう(正確に何をしているのかを言うほどupstartを知りません)。
2行目は、5秒以内に最大20回再生する制限を示しています。この制限はsystemdで設定できます。StartLimitBurst=20
そしてStartLimitIntervalSec=5
。
最後に、すべてを1つにまとめると、/etc/systemd/system/x11vnc.service
ファイルには次のものが含まれます。
[Unit]
Description=x11vnc
StartLimitBurst=20
StartLimitIntervalSec=5
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /root/.vnc/passwd -rfbport 5900 -shared
Restart=on-failure
[Install]
WantedBy=multi-user.target
ファイル作成後、systemctl daemon-reload
systemdを実行してユニットファイルをロードします。次にsystemctl start x11vnc.service
実行を開始し、systemctl enable x11vnc.service
起動時に開始します。