基本的なスタートアップスクリプトをsystemdに移行する


17

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


3
Upstartユーザー向けのSystemdは、良い出発点です。
ムル

回答:


13

systemdに移行するための最初のルール

この時点で、2015年には、誰かがすでにそれを行っている可能性が最も高いです。

systemdは数年前から存在しています。そして、ユニットファイルを書いて公開する人々の家内産業がありました。特にGitHubは、サービスユニットのコレクションのリポジトリを引き付けるようです。

実際、autossh.service(フレーズとして)WWWを検索すると、次のようになります。

テンプレートユニット

とはいえ、StackExchangeのいくつかの場所で指摘したように、この種の移行は機構的なプロセスではなく、ユニットファイルにあるものからロボットに変換するだけで、誤って、または少なくとも不十分に動作します。この場合、テンプレートユニットautossh処理されるように積極的にパンし、ターゲット名でパラメーター化された実際のサービスユニットにインスタンス化されます。として、持っている:/etc/systemd/system/autossh@.service

[単位]
Description =%iからのリバーストンネルのAutoSSHサービス 
After = network.target

[サービス]
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週間も経たないうちにこれにtoられたことがわかります。


ありがとう-私はそれに似た何かを思い付いたが、私は「テンプレートユニット」の考え方を認識していませんでした
trvrm

@JdeBP ここでも同様の質問があります。あなたが私を助けることができるかどうかを見たかった。
user1950349
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.