サスペンドの前後でコマンドを実行する【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
を使います。