jarファイル(datacollector.jar
)を実行する必要があります。たとえば、一定の時間間隔でLinuxマシン上にパス(/home/vagrant/datatool
)があるとします。たとえば、今後18:00の10-06-2017から03:00 11-06-2017までです。その後、そのプロセスは殺されるべきです。今後Linuxで一定時間jarファイルをスケジュールする方法は?
とがで始まる2つの引数をとるシェルスクリプトを作成したいと思います。
スクリプトは、すでに実行中であるかどうかを通知し、時間を終了する前に手動で停止できる必要があります。
オンラインで調査をした結果、これを把握することはできません。どうすればこれを達成できますか?
私はmyshell.shは4つの引数
[start_date] [start_time] [end_date] [end_time].
とスクリプトコード取るここで解決策を考え出す:
#!/bin/bash
JAR_PATH=/home/vagrant/datatool/datacollector.jar
PID_PATH=/tmp/datacollector-id
#calculate wait time to run the jar
wait=$(($(date -d "$1 $2" "+%s")-$(date "+%s")))
wait_mins=$((wait/60))
#calculate time for which jar file should be executed
run_interval=$(($(date -d "$3 $4" "+%s")-$(date -d "$1 $2" "+%s")))
run_interval_mins=$((run_interval/60))
echo "tool will satrt after $wait_mins"
#wait before running jar file
sleep "$wait_mins"m
#run the jar file
nohup java -jar $JAR_PATH /tmp 2>> /dev/null >> /dev/null &
echo $! > $PID_PATH
#wait for jar execution time
sleep "$run_interval_mins"m
#kill the jar process
PID=$(cat $PID_PATH);
echo "tool process killed"
kill $PID;
echo "program terminated"
と私はコマンドを使用してコードを実行しています:
$ nohup ./myshell.sh 2017-06-08 20:07:00 2017-06-08 20:10:00 >> scriptoutput.txt 2>> /dev/null &
を
およびscriptoutput.txtには、次の情報が含まれます。
tool will satrt after 3
tool process killed
program terminated
どこでコードを改善する必要がありますか? これを行うにはもっと良い方法はありますか?
あなたの研究とそれを解決しようとする試みを示してください。改善できるところを指摘できます:https://stackoverflow.com/help/how-to-ask –
superuser.comへの移行に投票しました。 – peterh
私はあなたの質問がほんの少しだけ改善されたと思うと思う(https://meta.stackoverflow.com/a/291370/1783163)。それは私の編集後の見栄えです。また、あなたはそれを行うことができます。 – peterh