
次の機能を使用してクローンジョブを作成する必要があります。
タスクは特定のディレクトリに移動し、5秒ごとにファイルをタッチする必要があります。 1分間だけ実行する必要があります。ロジックはファイルのタイムスタンプを変更することです。
私は次のような論理を思いついた。
次のクローンジョブを作成しました。
00-01 09 * * * /home/flexsys/test.sh
(作業は9:00から始まり9:01まで続く)
スクリプトの内容は次のとおりです。
#!/bin/tcsh
cd /home/A/B/C/
while true
do
sleep 5
touch ABC.txt
done
どの基準タブに何を入れるべきかわかりません。ループ句なしでこれを試しましたが、ファイルに一度だけ触れました。 9時1分までこれを繰り返す必要があります。この目標を達成するにはどうすればよいですか?
答え1
00-01 09 * * * /home/flexsys/test.sh (the job will start at 9:00 and run upto 9:01)
そういう意味ではありません。これは、ジョブが午前9時に実行されることを意味します。そして9:01に再実行されます。 Cronは仕事を取り除く概念を持っていません。ただ始めるだけです。
の場合は、コマンドwhile
を実行しdate
、分を探し、それが正しいことをテストする必要があります00
。私のシステムでは
date | cut -c12-19
フルタイム12:36:28に戻ります。システムの出力cut
から分だけ抽出する方法を理解する必要があります。date
test
最後に、値がゼロであることを確認するコマンドが必要です。
別のオプションは、スクリプトを60秒間実行し、5秒ごとに操作を実行する必要がある場合は、特定の回数だけ実行してから終了できます。
直面した最後の問題は、ls
ほとんどの(すべてではありませんが)Unixシステムのコマンドが秒単位で正確なタイムスタンプを表示しないことです。perl
ファイルのタイムスタンプが5秒ごとに更新されることを確認するには、外部ツールまたはスクリプトが必要になる可能性があります。私はこれについてあなたを助けることができません。
答え2
00 09 * * * /home/flexsys/test.sh
#!/bin/tcsh
cd /home/A/B/C/
@ a = 0
while ( $a != 12 )
sleep 5
touch ABC.txt
@ a = $a + 1
end
これによりスクリプトは一度だけ実行されますが、各タッチの間に5秒間隔でファイルを12回タッチします。 12 * 5が60の場合、スクリプトの実行に1分かかります(遅いNFSなどの遅いファイルシステムを使用しない限り)。