web-dev-qa-db-ja.com

基本的なupstartスクリプトをsystemdに移行します

サーバーを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サービスとして書き直すにはどうすればよいですか?

16
trvrm

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られたことがわかります。

12
JdeBP