Скрипт Bash работает в корне, но не в crontab

Попробуйте это,мы можем удалить суффикс 3 символа, используя приведенный ниже код

find. -maxdepth 1 -mindepth 1 -name '*-v4' -type d -execdir bash -c 'mv "$1" "${1%???}"'  mover {} \;
1
05.05.2021, 12:04
2 ответа

Вы не говорите нам, как это терпит неудачу, но я предполагаю, что вы не видите, как это выполняется.

Во-первых, ваш сценарий никогда не будет работать, так как while($true)недопустимый синтаксис оболочки. Я предполагаю, что вы хотите что-то вроде этого:

true=1
while(($true)); do... ; done

Более распространенная идиома для этого:

while : ; do... ; done

Или(trueэто команда):

while true; do... ; done

Скорее всего, это связано с тем, что вы используете относительные пути в своем скрипте.:

./transfermysql.sh > file.txt

Замените его полным путем:

/path/to/transfermysql.sh > /path/to/file.txt

Далее, я также подозреваю, что bcpне находится в PATH cron,так что используйте полный путь к этому:

/path/to/bcp tablename in file.txt -S ***********.com,**** -U **** -P *********** -d ********* -c

Наконец, я не знаю, зачем вам нужен :> file.txt, так как ваша первая команда все равно перезаписывает свое содержимое, но если вам по какой-то причине это нужно, вам также нужно использовать полный путь:> /path/to/file.txt.

1
28.07.2021, 11:34

Задания, выполняемые через cron, atили batch, не выполняются в той же среде выполнения, что и на вашем рабочем столе. Ни одно из ваших изменений PATHили других настроек переменных среды не распространяется автоматически на ваше задание cron. Например, $DISPLAYнет, поэтому программы с графическим интерфейсом требуют специальной обработки (читатьman xhost).

Можно установить переменные среды для всех своих cronзаданий в файле crontab. Прочтите man 5 crontab.

Посмотрите на результаты echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";aliasв каждой из ваших сред.

Поскольку часть commandстроки crontabпо умолчанию интерпретируется как /bin/sh, который имеет более простой синтаксис, чем /bin/bash, я рекомендую, чтобы commandбыл вызовом bashисполняемый файл сценария (, смонтированный, начинается с #!/bin/bash), который настраивает среду, а затем вызывает нужную программу.

0
28.07.2021, 11:34

Теги

Похожие вопросы