#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


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS