平日の勤務時間にのみ必要なLinuxサーバーがあります。常にオンにすることは意味がありません。
監督なしで設定された日時でLinuxシステムを一時停止して再開するには?
答え1
これを行うには、systemctl suspend
コマンドrtcwake
を使用して電源を管理するシェルスクリプトを作成しました。
実行するとループ(15分ループ)として機能します。
今日がどんな曜日かを確認し、
いつ起きるかを決める
すぐに一時停止する必要があることを確認してください。
#!/bin/bash
while [ 1=1 ]; do # repeat forever
clear
echo "Updated: $(date '+%F %T')"
echo "### TIME SECTION"
SLEEP_H=18 # What hour should the system suspend at?
WAKE_H=8 # What hour should the system wake up at?
# check what day of the week it is now
DOW=$(date +%w) # 1 = monday, 5 = friday etc.
echo "Day of week: $DOW"
# check what time is it now
H=$(date +%H)
M=$(date +%M)
NOW_S=$(date +%s)
echo "Hour: $H, minute: $M"
#date +%s --date "tomorrow 8:00"
if [[ $DOW -lt 5 ]]; then
echo "It's Monday to Thursday!"
WAKE="tomorrow $WAKE_H:00"
else
echo "It's Friday to Sunday!"
WAKE="monday $WAKE_H:00"
fi
WAKE_S="$(date --date "$WAKE" +%s)"
WAKE_SR=$(( $WAKE_S - $NOW_S))
echo
echo "Wake: $WAKE"
echo "Wake relative seconds: $WAKE_SR"
echo
rtcwake -m no -s "$WAKE_SR"
# sleep section
sleep 15m
echo "### SLEEP SECTION"
if [[ $H -gt $SLEEP_H ]]; then # sleep if the hour is right
systemctl suspend
continue
else
echo "It's too early to sleep"
fi
if [[ $DOW -gt 5 ]]; then # sleep if it's saturday or sunday
systemctl suspend
continue
else
echo "It's not weekend - gotta stay up!"
fi
done
スクリプトは、システムが月曜日から金曜日まで午前8時に目覚め、午後6時に省電力モードに切り替えるように設定されています。
週末と夜は眠ります。必要に応じて自由に修正してください。
このスクリプトをに保存しました/root/power-schedule.sh
。実行可能であることを確認してください: `sudo chmod +x /root/power-schedule.sh'
@reboot
また、突然の停電によってスケジュールが中断されないように、スクリプトを時間とともにcrontabに配置してください。
ランニング:
sudo crontab -e
そして次の行を追加してください:
@reboot exec /root/power-schedule.sh
AC電源が検出されたら、システムの電源を入れるようにUEFI / BIOSを設定することもできます。これにより、電源が切れた後に起動が発生します(通常はデフォルトの動作であるオフ状態を維持する代わりに)。
答え2
短い冗談:
rtcwake -m mem -s $(($(date --date "20:30" +%s) - $(date +%s)))
ネットワーク共有がマウントされている場合やトラフィックが検出されたときにネットワークが起動した場合は機能しません。
Wake on LANを無効にする:
ethtool -s eno1 wol d
または単に「Magic Packet」に委任してください。
ethtool -s eno1 wol m
ネットワーク共有を削除するには:
sudo fuser /mount/share
これらのプロセスを終了/終了し、共有または必要に応じumount
てumount -f -l
。
時にはタイムアウトが発生するのに時間がかかるため、次の方がうまく機能します。
while sleep 1; do rtcwake -m mem -s $(($(date --date "20:30" +%s) - $(date +%s))) && break; done
20:30
交換することもできますtomorrow 9:00
。時間を見直しても心配しないでください。rtcwake
システムクロックがそうであればそうなりますUTC
。