サスペンドの前後でコマンドを実行する【systemd】

 Ubuntuでサスペンドするときの前後でコマンドやシェルを実行する手順を紹介します。

Ubuntuのサスペンド

 現在はsystemdのサスペンドを利用します。コマンドは下記です。

sudo systemctl suspend

 pm-utilsは現在開発されておらず、使われなくなりました。

サスペンドの前後にコマンドを実行するには

 systemdで制御されているのでUnitファイルを作成する必要があります。ファイル名は下記のようにします。

ユーザーで実行する場合(例、foo)

/etc/systemd/system/suspend@foo.service
/etc/systemd/system/resume@foo.service

rootで実行する場合

/etc/systemd/system/root-suspend.service
/etc/systemd/system/root-resume.service

各Unitファイルのサンプル

ログを出すだけのサンプルを紹介します。

/etc/systemd/system/suspend@foo.service

[Unit]
Description=User suspend actions
Before=suspend.target

[Service]
User=%I
Type=simple
ExecStart=/usr/bin/logger User_suspend_executed

[Install]
WantedBy=suspend.target

/etc/systemd/system/resume@foo.service

※注意※
resume.targetというのは無いのでAfter=suspend.targetです。

[Unit]
Description=User resume actions
After=suspend.target

[Service]
User=%I
Type=simple
ExecStart=/usr/bin/logger user_resume_executed

[Install]
WantedBy=suspend.target

/etc/systemd/system/root-suspend.service

[Unit]
Description=Local system suspend actions
Before=suspend.target

[Service]
Type=simple
ExecStart=/usr/bin/logger root_suspend_executed

[Install]
WantedBy=suspend.target

/etc/systemd/system/root-resume.service

[Unit]
Description=Local system resume actions
After=suspend.target

[Service]
Type=simple
ExecStart=/usr/bin/logger root_resume_executed

[Install]
WantedBy=suspend.target

サービスを登録

systemdに作成したUnitファイルを登録し有効化します。

sudo systemctl daemon-reload
sudo systemctl enable suspend@foo.service
sudo systemctl enable resume@foo.service
sudo systemctl enable root-suspend.service
sudo systemctl enable root-resume.service

※WantedByを間違えた時はsystemctl daemon-reloadだけでは反映されず一旦disableしてenableしないと反映されません。

これでjournalctlでログが出力されていればOKです。

後はloggerの行に自分で起動したいコマンドを書くだけです。

hibernete、sleep

suspend.targetではなく

hibernate.target
sleep.target
を使います。

参考リンク

「Systemd」を理解する ーシステム管理編ー
ArchWiki電源管理

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です