2017-06-07 9 views
-1

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 

どこでコードを改善する必要がありますか? これを行うにはもっと良い方法はありますか?

+2

あなたの研究とそれを解決しようとする試みを示してください。改善できるところを指摘できます:https://stackoverflow.com/help/how-to-ask –

+0

superuser.comへの移行に投票しました。 – peterh

+0

私はあなたの質問がほんの少しだけ改善されたと思うと思う(https://meta.stackoverflow.com/a/291370/1783163)。それは私の編集後の見栄えです。また、あなたはそれを行うことができます。 – peterh

答えて

1

あなたの投稿を考えると、おそらくソースコードを変更して再コンパイルすることは許されません。したがって、あなたが外部のものを必要とする、いくつかの他のプロセス

  • が開始JVM
  • とジャー
  • それを停止し、開始についてユーザーに通知し、停止します。行うには

最も簡単な方法

  • atコマンド(あなたがそれを将来的に何かを始めることができます)
  • cronコマンド(であること、あなたは定期的にバックグラウンドでそれでコマンドを実行することができますすることができます)
  • およびシェルスクリプト。

1回だけ実行する場合は、「at」コマンドが最適です。

「linuxシェルスクリプトチュートリアル」のgooglingで、linuxシェルスクリプトについて学んでください。 http://unix.stackexchange.comに問題に関する具体的な回答を記載することができます。

関連する問題