#author("2022-11-18T06:59:46+00:00","default:admin","admin") #author("2022-11-18T07:02:58+00:00","default:admin","admin") hogehoge #!/bin/bash # 設定サイト(V1) #readonly URL='http://plsk.net/autodown-test-20221109' # 設定サイト(V2) readonly URL='http://plsk.net/autodown-config-6LvMhJwy4i6Uud5Q' # 月火水木金土日の順で、営業日はo、休日はx readonly DEFAULT_DOW='oooooxx' # 強制シャットダウン時刻 readonly DEFAULT_TIME='22:00' # スクリプト内でエラーがあれば exit set -e # trap でエラー発生時と終了時のシグナルを捕捉 trap catch ERR trap finally EXIT # 例外発生時の処理 # ex) ネットワーク接続障害で設定サイトにアクセスできない function catch { echo 'catch: エラーをキャッチしました。' day_of_week=$(date +%u) hour=$(date +%H) flg_dow=$(echo $DEFAULT_DOW | awk '{print substr($0, '$day_of_week', 1)}') now=$(date '+%H%M') tgt=$(echo $DEFAULT_TIME | sed -e "s/://") if [ $flg_dow = 'o' ] && [ $hour -ge 7 ] && [ $hour -lt 22 ] && [ $now -lt $tgt ]; then echo "shutdown at $DEFAULT_TIME" sudo shutdown -h $DEFAULT_TIME msg="$DEFAULT_TIME に終了します。" else echo 'shutdown after 10 min.' sudo shutdown -h +10 msg="10分後に終了します。" fi } # 終了時の処理 function finally { say -v Kyoko "$msg" osascript -e "display dialog \"$msg\" with title \"自動シャットダウン\" with text buttons {\"確認\"}" echo 'finally: 処理を終了します。' } #### main #### # 設定サイトへのアクセスを試行(リトライ5回) cfg=$(curl -fs --retry 5 $URL) # 設定サイトから設定値読み込み(V1) #cfg_dow=$(curl -fs $URL | grep -m1 DAY_OF_WEEK | awk 'match($0, /DAY_OF_WEEK.*/) {print substr($0, RSTART+12, 7)}') #cfg_time=$(curl -fs $URL | grep -m1 TIME | awk 'match($0, /TIME.*/) {print substr($0, RSTART+5, 5)}') # 設定サイトから設定値読み込み(V2) hostname=$(hostname) # hostname の .local は削除 hostname=$(echo $hostname | sed -e "s/\.local//") echo "hostname=$hostname" hnlen=$(echo ${#hostname}) #config=$(curl -fs $URL | grep -m1 $hostname | awk -v hostname=${hostname} -v hnlen=${hnlen} 'match($0, /2022-003.*/) {print substr($0, RSTART, 8+14)}') config=$(curl -fs $URL | grep -m1 $hostname | awk 'match($0, /'${hostname}'.*/) {print substr($0, RSTART, '${hnlen}'+14)}') echo "config=$config" # hostname に対する設定がない or 設定ミスの場合は DEFAULT 設定を使用 #if [ -z "$config" ] || [ "$config" != "$hostname*,[ox]{7},[0-9]{2}:[0-9]{2}" ]; then if [ -z "$config" ]; then config=$(curl -fs $URL | grep -m1 DEFAULT | awk 'match($0, /DEFAULT.*/) {print substr($0, RSTART, 7+14)}') # ネットワーク障害等で DEFAULT 設定も読み込めなかった場合への対応 if [ -z "$config" ]; then echo "Use DEFAULT(static) config" config="DEFAULT,$DEFAULT_DOW,$DEFAULT_TIME" else echo "Use DEFAULT config" fi fi echo $config cfg_dow=$(echo $config | awk -F',' '{print $2}') cfg_time=$(echo $config | awk -F',' '{print $3}') echo "cfg_dow=$cfg_dow" echo "cfg_time=$cfg_time" day_of_week=$(date +%u) hour=$(date +%H) flg_dow=$(echo $cfg_dow | awk '{print substr($0, '$day_of_week', 1)}') now=$(date '+%H%M') tgt=$(echo $cfg_time | sed -e "s/://") echo "flg_dow=$flg_dow" echo "hour=$hour" echo "now=$now" echo "tgt=$tgt" # フレックスタイムは 8:00-22:00 # 8時始業に合わせて8時前に電源ONすることを考慮し、7-21時台起動なら設定時刻に自動シャットダウン # 現在時刻が設定時刻を過ぎてる場合は10分後にシャットダウン if [ $flg_dow = 'o' ] && [ $hour -ge 7 ] && [ $hour -lt 22 ] && [ $now -lt $tgt ]; then echo "shutdown at $cfg_time" sudo shutdown -h $cfg_time msg="$cfg_time に終了します。" else echo 'shutdown after 10 min.' sudo shutdown -h +10 msg="10分後に終了します。" fi