サーバーをUbuntu 14.10から15.04にアップグレードしたばかりで、カスタムupstartスクリプトを使用して開始したいくつかのサービスが実行されなくなりました。
私の理解では、それらをsystemd
サービスとして書き直す必要がありますが、systemd
システム全体を一晩で学習するという考えは少し気が重いです。
Upstartスクリプトは、起動時にautossh
を起動するだけで、長時間実行されるプロセスを起動する同様のスクリプトがいくつかあります。
#/etc/init/autossh.conf
description "Maintain a permanent SSH tunnel to <other_server>"
start on started mountall
stop on shutdown
exec autossh -N other_server
これをsystemd
サービスとして書き直すにはどうすればよいですか?
この時点で、2015年には、誰かがすでにそれを行っている可能性が最も高いです。
systemdは数年前から存在しています。そして、ユニットファイルを書いて公開する人々の家内産業がありました。特にGitHubは、サービスユニットのコレクションのリポジトリを引き付けるようです。
確かに(フレーズとして)autossh.service
をWWWで検索すると、次のようになります。
とは言っても、StackExchangeのいくつかの場所で指摘したように、この種の移行は機構的なプロセスではなく、ユニットファイルにあるものからロボットに変換するだけで、間違った動作を行ったり、少なくとも不十分な動作をしたりすることがあります。この場合、autossh
は、テンプレートユニットで処理されるように積極的にパントし、実際のサービスユニットにインスタンス化され、ターゲット名。 /etc/systemd/system/[email protected]
のように、次のものがあります。
[Unit] Description =%iからのリバーストンネルのAutoSSHサービス After = network.target [Service] User = autossh EnvironmentFile =/etc /%p /%i.conf ExecStart =/usr/bin/autossh -M 0 -q -N $ SSH_USER @%i $ SSH_OPTIONS [インストール] WantedBy = multi-user.target
最小限で/etc/autossh/other_server.example.conf
という名前のファイルを作成します。
SSH_USER = joe
通常の制御はすべて適用されます:
systemctl enable autossh@other_server.example
—ブートストラップ時にインスタンスが自動的に開始されるようにします。systemctl start autossh@other_server.example
—そのインスタンスをすぐに手動で開始します。systemctl status autossh@other_server.example
—ステータスを確認します。はい、最初のルールもこれに適用されます。検索すると、OpenSUSEのGreg Freemyerによって、2週間以内に私がこれにthisられたことがわかります。