У меня странная проблема, связанная с возможностью запуска bash-скрипта из командной строки, но не из записи crontab для root. Я использую 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
Если я запускаю сценарий из строки cmd, используя bash, он работает нормально, но завершается неудачно с sh со следующей ошибкой:
jmeter-cron-randomise.sh: 7: jmeter-cron-randomise.sh: arithmetic expression: expecting primary: " % 1 "
После поиска проблемы, похоже, что оболочка stand не имеет те же математические операторы, как% (модуль), как 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
Я отмечаю в crontab (5) страница справочника, это:
''шестое'' поле (остальная часть строки) определяет команду, которая будет выполнена. Вся часть команды строки будет выполняться /bin/sh или оболочкой, определенной в переменной SHELL cronfile.
Так, можно хотеть определить удар или с
SHELL=/bin/bash
или, как вышеупомянутое влияние все сценарии крона, это
* * * * 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
# ...............^^^^
crontab делает , выполняет сценарий с bash
;
, Но Вы выполняете его рекурсивно с at
.
И at
использование /bin/sh
.
из-за более ранней проблемы, спецификация времени для at
now+0min
- таким образом, она работает снова только в конце.
, Что выполненные сбои, таким образом, по крайней мере, нет никакого цикла.
продвижение задач к эти now+0min
состоит в том, что n % 1
0, таким образом $RANDOM % 1
= 0, и rmin
= 0.
Добавляют вторую строку
set -x
к сценарию для лучшего входа, Вы будете последняя строка с 0 timespec.