この記事はLinux Advent Calendar 2014の8日目の記事です。
systemdでシステムshutdown時に何かさせる場合の.serviceファイルについて書いてみたいと思います。
systemdで何かを実行する場合、どこにインストールするか(Installセクションをどうするか)が重要で通常のサービスだとmulti-user.targetを指定していると思います。
今回はshutdown時に実行させたいのでInstallセクションにはshutdown.targetを指定します。
では.serviceファイルを見てみましょう
[Unit] Description=Pronama-chan gives you to greeting when system is going to be shutdown Before=shutdown.target alsa-store.service DefaultDependencies=no ConditionFileIsExecutable=/usr/local/bin/pronama-chan-greeting.sh [Service] Type=oneshot ExecStart=/usr/local/bin/pronama-chan-greeting.sh [Install] WantedBy=shutdown.target
まずはUnitセクションから見て行きましょう。ここでは通常の.serviceでは見ないConditionFileIsExecutableとDefaultDependenciesを使ってます。
前者のConditionFileIsExecutableはConditionPathExists族の処理で、名前の通りですがファイルが存在してかつ実行属性が付いているかのチェックを行っています。 これは!で否定することもできるので、ファイルがない場合に実行ということもできます。まあ、今回の処理だと別に不要なんですがなんとなく使ってます。
DefaultDependenciesは通常不要でデフォルトはyesとなっています。これは普通のサービスならシステムがある程度起動してからじゃないとサービスを起動できないなどの依存がありますが、ここではあえてnoに設定しています。yesで試したらうまく動かなかったです。
Beforeにはshutdown.targetとalsa-store.serviceを指定しています。とりあえずshutdown.targetよりも前に動かさないといけないのでこれは必須ですね。
次のServiceセクションですがこれは特に変わったことはしていません。
最後のInstallセクションですがこれは冒頭で説明したとおりshutdown時に動かすサービスなのでshutdown.targetを指定してます。
実行するpronama-chan-greeting.shは単にmpg123でmp3ファイルを再生させてるだけなので割愛します。
さて、今回作成した.serviceをenableして実行したのが↓になります。gnome3のpower offのメニューで電源offをクリックしたらすぐに音声が再生されます。下の動画で音が出ない人は音声がミュートされているかも(動画画面の端に出るスピーカーアイコンをチェック)。
Watch masami256's Vine "systemd便利♪( ´▽`)"
「独習Linux専科」サーバ構築/運用/管理 ――あなたに伝えたい技と知恵と鉄則 (Software Design plus)
- 作者: 中井悦司
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/30
- メディア: 大型本
- この商品を含むブログ (1件) を見る