web-dev-qa-db-ja.com

コマンドラインbashから動作する場合、crontabからbashスクリプトを実行できません

ルートのcrontabエントリからではなく、コマンドラインからbashスクリプトを実行できるという奇妙な問題があります。 Ubuntu 12.04を実行しています。

* * * * 1-5 root /home/xxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/jmeter-cron-randomise.sh >> /home/xxxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/cron.log

bashを使用してcmd行からスクリプトを実行すると、正常に動作しますが、次のエラーでshで失敗します。

jmeter-cron-randomise.sh: 7: jmeter-cron-randomise.sh: arithmetic expression: expecting primary: "  % 1 "

問題をグーグルで調べたところ、スタンドシェルにはbashのような%(モジュラス)のような同じ数学演算子がないようです。スクリプトでcronジョブが失敗する理由がわかりませんか?そのbashシェルを使用していないので、私はそれを仮定していますか? cronデーモンによって確実に起動されます(/ var/log/syslogで確認できます)。助けていただければ幸いです。

問題を引き起こすスクリプト

#!/bin/bash
echo Running the jmeter-cron-randomiser script


script="/home/xxxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/jmeter-cron.sh"    

min=$(( 1 * 1 ))
rmin=$(( $RANDOM % $min ))

echo  "min = ${min}";
echo  "rmin = ${rmin}"

at -f "$script" now+${rmin}min
3
kal

crontab(5) manページで、これに注意します:

「6番目」フィールド(行の残り)は、実行するコマンドを指定します。行のコマンド部分全体は、/ bin/shまたはcronfileのShell変数で指定されたシェルによって実行されます。

そのため、次のいずれかの方法でbashを指定できます。

Shell=/bin/bash

または、上記はすべてのcronスクリプトに影響するため、これは

* * * * 1-5 root bash /home/xxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/jmeter-cron-randomise.sh >> /home/xxxxxxx/jmeter/VerificationService-0.0.1-SNAPSHOT/cron.log
# ...............^^^^
4
glenn jackman

Crontab doesbash;でスクリプトを実行します。

ただし、atを使用して再帰的に実行しています。

at/bin/shを使用します。

以前の問題のため、atの時間指定はnow+0minなので、最後に再び実行されます。

その実行は失敗するため、少なくともループはありません。

now+0minにつながる問題は、n % 1が0であるため、$RANDOM % 1 = 0、およびrmin = 0です。

2行目を追加

set -x

ロギングを改善するためにスクリプトに追加すると、timespecが0の最後の行になります。

0
Volker Siegel