
私は AIX サーバーで、毎日 13:00 に正確に実行する必要がある ksh シェル スクリプトを開発しています。CRONTAB、AT、WATCH、inotify、date -d などを使用する権限がありません。唯一のオプションは、スクリプトを継続的にループさせてバックグラウンドで実行することです。
while [ $(date +%H%M) != 1300 ]
do
actions
sleep 60
done
上記のコードを試しましたが、while
条件が満たされるまでバックグラウンドで継続的に実行したくありません。sleep
またはwhile
ループを使用する他の方法、または継続的に実行するのではなく 1 回だけ実行する方法を提案してください。
答え1
私は でのみこれを実行しておりperl
、 は使用したことはありませんksh
が、なぜそれが不可能なのかわかりませんが、次のように実行しました (おそらくどの言語でも有効なコードではありません)。
while(true)
starttime=`date +%s`
actions
sleep starttime+24*60*60-`date +%s`
end
これでは、アクションが 24 時間ごとに開始されるだけです。13:00 に実行させるには、開始時に 13:00 まで待機するループを追加するだけでよいと考えました。考えてみると、starttime+24*60*60
次のように置き換えたほうがよいかもしれませんdate -d "13:00 tomorrow" +%s
。