2017-01-06 10 views
0

Я пытаюсь переместить файлы crontab для получения запланированного, но crontab не перемещает файлы. Если я сделаю это вручную, это сработает ... знаете ли вы, что может быть возможной причиной? Это то, что у меня есть:Перемещение файлов с помощью задачи crontab не работает, но работает, если выполняется вручную

13,29 * * * * mv $(grep -l "File was not FOUND" /home/user/test*) /home/user/temp 

Если я выполняю следующую строку она работает без каких-либо проблем:

mv $(grep -l "File was not FOUND" /home/user/test*) /home/user/temp 
+0

Попробуйте установить «-x;» прямо перед «mv», чтобы точно увидеть, какая команда запущена. Iirc некоторые реализации cron выполняют свой собственный (полуобробленный) синтаксический анализ вместо того, чтобы вслепую передать строку в оболочку – loreb

+0

, но как предполагается посмотреть, что он делает, если выполняется с помощью cron, вывод не отображается в консоли. –

+0

«set -x» печатает команды по мере их выполнения, и cron должен отправить вам это письмо - попробуйте добавить «тест эха», который запускается каждую минуту, подождите минуту, вы должны иметь почту в/var/mail/(или независимо от того, что вы настроили) – loreb

ответ

2

По умолчанию хрон рабочих мест выполняются с использованием /bin/sh. Вы должны быть в состоянии установить оболочку использовать, добавив его непосредственно перед работой, как это:

SHELL=/bin/bash 
13,29 * * * * mv $(grep -l "File was not FOUND" /home/user/test*) /home/user/temp 

... или какой оболочки вам нравится.

В качестве альтернативы, если ваш crond не поддерживает эту запись, вы можете явно вызвать оболочку вам нравится, используя его -c аргумент:

13,29 * * * * bash -c 'mv $(grep -l "File was not FOUND" /home/user/test*) /home/user/temp' 

Обратите внимание на ограждающие одиночные кавычки. Они требуются, так как вся команда должна быть единственным аргументом для оболочки.

Еще один способ будет преобразовать вашу команду, чтобы использовать обычный старый Борн оболочки (ш) синтаксис, который я считаю, должно быть:

13,29 * * * * mv `grep -l "File was not FOUND" /home/user/test*` /home/user/temp 

... используя кавычку для подстановки команд.

+0

Когда я это сделаю, я получаю эту ошибку: SHELL =/bin/bash crontab: ошибка на предыдущей строке; неожиданный символ, найденный в строке. crontab: обнаружены ошибки во вводе, не создается файл crontab. –

+1

Интересно. Я добавил еще один способ получить тот же результат. Из любопытства, какую платформу вы используете? – spectras

+0

это SunOS 5.10 Generic_150400-28 –