Cronjob:ファイルを反復処理する


0

cronジョブを使用して、bashスクリプトのリストを反復処理したいと思います。つまり、2時間ごとに別のbashスクリプトを開始します。私のアイデアは、cronjobスクリプトがこの環境変数を読み取り、対応するスクリプトを呼び出し、環境変数をインクリメントするたびに、新しい環境変数を設定することでした。

私はこれを試してみましたが、test.sh端末から呼び出すと動作します。

# test.sh
JOB_COUNTER=$((JOB_COUNTER + 1))
echo $JOB_COUNTER
export JOB_COUNTER=$JOB_COUNTER

私は内から呼び出す置く場合はcrontab$JOB_COUNTER(私はそれをチェックインクリメントを取得していないようですecho $JOB_COUNTER

コンテキスト:すべてのジョブを一緒に送信する場合、スケジューラーは並行して非常に多くのジョブを開始し、I / Oが遅すぎるためほとんどのタイムアウトになるため、2時間ごとに50個の新しいジョブをクラスターに追加します。cronジョブが使用するものではない場合、私は他のアイデアを受け入れています。


リストを実行するだけの単純なPython(またはシェル)スクリプトを作成する方が簡単ではないでしょうか?スクリプトでsleep()を実行するだけです-CPU時間はかかりません。
jcoppens

JOB_COUNTERはどこで初期化しますか?また、cronは実行ごとに新しいシェルを作成することに注意してください。JOB_COUNTERを永続化する必要があります。たとえば、cronのユーザー.bashrcに書き込みます。
bjanssen

回答:


0

cronによって呼び出される各test.shは新しいプロセスであるため、環境変数は削除されます。

試して

# test.sh
JOB_COUNTER=$(< $HOME/jobcounter.txt )
JOB_COUNTER=$((JOB_COUNTER + 1))
echo $JOB_COUNTER > $HOME/jobcounter.txt
echo $JOB_COUNTER
# JOB_COUNTER can be used here 

test.shをソースにしない限り、シェルの呼び出しでJOB_COUNTERを使用できないことに注意してください(. ./test.sh

初期化してリセットする必要があります $HOME/jobcounter.txt

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.