実際、システムデバイスに「After = suspens.target」を指定する競合条件はありますか?

実際、システムデバイスに「After = suspens.target」を指定する競合条件はありますか?

存在する復元時にanacronを起動するためのDebianバグレポート、一部では、システムの依存関係がどのように機能するかによって、このコードスニペット(簡潔さのために簡略化)が再開ではなく一時停止時にトリガーされる可能性があると主張しています。 systemd 文書と systemd に付属の単位ファイルを使用して表示される競合状態を理解できません。

[Unit]
Description=Do something at resume
After=suspend.target

[Service]
ExecStart=/bin/do-something

[Install]
WantedBy=suspend.target

systemd-suspend.serviceこの記事の著者は、次のステートメントを含むを引用します(再び関連するステートメントに圧縮されています)。

[Unit]
After=sleep.target
Requires=sleep.target

2つ目は、2つの異なる単位(両方とも後でソートされる)が並列にsleep.target実行されるため、2つのユニット間にソートがないことです。私はこの言葉に完全に同意しますが、両方に依存する2つのユニットはありません。sleep.target、私が知っている限り。宣言はスリープモードの前に完全に開始され、すべての従属デバイスが起動することをsystemd-suspend.service保証します。しかし、(元のユニットファイルが実際に依存するターゲット)を見てみると、次のような内容が見つかりました。sleep.targetsleep.targetsuspend.target

[Unit]
BindsTo=systemd-suspend.service
After=systemd-suspend.service

suspend.target私はこのファイルが成功したリリース後に成功したリリースのみをsystemd-suspend.service宣言することを理解しています。もう一度見てみると、systemd-suspend.serviceファイルに次の文を見つけることができます。

[Service]
Type=oneshot
Exec=/lib/systemd/systemd-sleep suspend

私が理解している限り、ワンタイムサービスはExecコマンドが完了するまで「開始」状態に移行しません。したがって、このサービスに対して注文したすべてのタスクはAfter完了するまで開始できません。最後に、システムが再び機能するまでブロックするsystemd-sleep文字列を魔法のように書くsystemd-sleepを見てください。これにより、後で開始したいすべてのタスクが復元前に実際に開始されないように/sys/power/stateする必要があります。systemd-suspend.service

私がブロックが記録されたと主張する理由/sys/power/stateは、書き込みが次のように行われるからです。このファイルのsysfs保存機能、これは呼び出されます。pm_suspend非睡眠モードでは、順番にenter_state(同じソースファイルから直接pm_suspend)呼び出され、明らかに再開する前に返されません。

答え1

あなたは正しいです。投稿 #124間違った。

人々は時々単位を書くのが問題ですWantedBy=sleep.target After=sleep.target。これにより、寝る前にデバイスが起動してから完了するのを待たずにスリープ状態になります。これはほとんど確かに彼らが望む仕事ではありません。おそらく、これはポスターが念頭に置いているでしょう。

権限:同様の分析に基づいて、履歴書でhdparmを実行するユニットを独立して作成しました。応答のようにうまく機能します投稿 #129説明する。私のデバイスは毎回うまく動作します。私は知っているので、私が走るならいいえハードドライブがカチッという音がします。以前はわかりました。udevエラーこれによりクリック音が聞こえるため、以前のソリューションを信頼できなくなりました。

関連情報