FC2ブログ
2017/12/04

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

Ubuntu17.10でサスペンドの際にコマンド等を実行する手順。

pm-utilsは現在開発されておらず、使われなくなりました。
(最近Archlinux Wiki(英語)のpm-utilページもアーカイブされてしまいました(;^_^A 日本語はまだありますが、、、)
というわけで色々な検索をしていたのですが、現在ではsystemdのサスペンドを利用すべきだそうです。

モジュールの再起動やシェルを実行する場合は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


サービスを登録


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電源管理
関連記事

コメント

非公開コメント