【shell】シェルでat,cronコマンドもどき(諸事情でatやcronを使いたくない場合に)
#!/usr/bin/bash ############################################################ ### 【シェルでat,cronコマンドもどき】※bashでのみ動作確認済 ### (c) 2017 mikan ### ※使用にあたっては利用者の自己責任でお願いします。 ### ### 使い方: ### 各種定義の、RUN_TIME、CUT、の内容を設定する。 ### ########## start ########## ~ ### ########## end ########## の間に、 ### 実行したい処理を書く。 ### ### 起動方法: ### 例1)nohup 本シェル名 & ### 例2)本シェル名 ### ### 終了方法: ### 例1)touch end.flg(本シェルと同じパスに作成) ### 例2)Ctrl+C ############################################################ ############################################################ ### 各種定義 ############################################################ ### 毎日 21:05 に起動 RUN_TIME="2105" CUT="cut -c1,2,3,4" ### 毎自 HH:15 に起動 #RUN_TIME="HH05" #CUT="cut -c3,4" ### 終了判定ファイル(存在したら終了します) END_FILE="end.flg" ############################################################ ### メイン処理 ############################################################ ### 自シェルの絶対パス MYPATH=`(cd $(dirname $0) && pwd)` ### 自シェル名(パスなし) MYNAME=`basename $0` ### 二重起動チェック if [ $$ != `pgrep -fo $0` ]; then echo date echo [$MYPATH/$MYNAME] is already started. echo exit command is \'touch end.flg\'. exit fi ### 開始メッセージ echo date echo [$MYPATH/$MYNAME] is start. echo exit command is \'touch end.flg\'. ### ループ処理 NOW_W="" while [ 1 ]; do # ### 終了判定 NOW=`date +%H%M | $CUT` if [ -e $MYPATH/$END_FILE ]; then date echo "find the [$MYPATH/$END_FILE] !" rm $MYPATH/$END_FILE break fi # ### 指定時刻と一致したら実行 # ### (1回だけでいいなら、ifの中でbreakしましょう) RUN_TIME_W=`echo $RUN_TIME | $CUT` if [ $RUN_TIME_W = $NOW ] && [ $NOW != $NOW_W ]; then echo date echo "########## start ##########" echo "ここに実行したい処理を書きましょう" echo "別のshlを呼んでもOKです" echo "########## end ##########" date fi NOW_W=$NOW # ###スリープ sleep 30 done ### 終了メッセージ echo date echo [$MYPATH/$MYNAME] is finish. exit 0