実際の日付/時刻を使用して一時停止を無視する省電力コマンドはありますか?
echo a;sleep 3600;echo b
10分働いて2時間ラップトップを停止します。一時停止中に目が覚めると、「b」はすぐにではなく50分後にのみ印刷されます。
別のオプションは
nA=`date +%s`;nB=$((nA+3600))
while((`date +%s`<nB));do sleep 1;done
ところで、これを行うコマンドがあるかどうか疑問に思います。sleep --usedatetimecheck 3s 3600
(3秒のように一時停止できる睡眠はオプション)があればいいでしょう。
ところで、コンピュータが一時停止状態で目覚めたときを検出するために使用する秘訣は、3秒間眠り、睡眠前の日時を比較して9秒より長い場合、コンピュータが目覚めたと推測することです(高い負荷平均も確認できます。 )。 9秒テストを追加します)。
私はUbuntuを使用しています。
PS:いくつかのことがすぐに起こると言うかもしれません。しかし、そのため選択肢でなければなりません。私に浮上したもう1つの問題は、たとえばすべてのスリープコマンドを更新するためにシグナルを送信できることですpkill -SIGUSR1 sleep
。
答え1
このようなものはsleep --wake-me-from-suspend --realtime
実際には存在しません。
一時停止を無視するのが最も難しい部分です。これは、一時停止中にCPU上で実行されていないソフトウェアがなく、実際にCPUが実行されず、リアルタイムクロックデバイスを使用してコンピュータを起動する必要があるためです。戻る。これを行うには、オペレーティングシステムに差益取引アクセス権が必要です。なぜなら、1つのRTC、多くのユーザー、およびプログラムを使用すると、1つのアクセス権しか付与できず、他のすべての人が何をするのかを妨げないようにしたいからです。
したがって、オペレーティングシステム(Linuxのようですが?)と通信し、RTC設定を調整できる何かが必要です。
systemd-timer
sがここに来る道です。
2つが必要です。
- 実行する内容をsystemdが理解できる形式に変換する必要があります。 ㅏユニットファイル(特にサービス)。読む
man systemd.service
! - 一時停止中にマシンを起動させることができるシステムタイマーをインストールする必要があります。なぜなら非常に特権タスク、このタスクはスーパーユーザー所有タイマーでのみ実行できます。見
man systemd.timer
てくださいWakeSystem=true
。
必要なタスクを実行するためにサービスファイルを作成します。これはおそらく起動しようとしているプロセスです(通常はそうです)、適切なサービスファイルType=
(通常exec)を作成します。または、ファイルの生成、ポートへのメッセージの送信、またはその他の操作の実行などの一部のタスクを実行できます。スクリプトは、続行する前にそのタスクが発生するのを待ちます。
サービスを開始するようにタイマーデバイスを作成します。あなたはOnCalendar=
「壁時計と紙カレンダー」のように厳しい気象時間を自分自身に与えました。正確な時間帯に時間を指定してください!通常、かなり明示的な日付/時刻形式を使用することをお勧めします2023-10-14 11:15:00 UTC
。
2つのファイル(およびveganeye.service
)veganeye.timer
をシステムデバイスのディレクトリ(通常は/etc/systemd/system/
)に配置してから、タイマーデバイス(systemctl enable --now veganeye.timer
)を起動します。 2つのファイルを作成してタイマーを有効にすると、これらすべてをシェルスクリプトで実行できます。実際、コードはあまりありません。