скрипт не работает в crontab

Я заметил, что ряд подобных вопросов задал, и я также попробовал опубликованные предложения, но я просто не могу заставить это работать. Ниже мой код.

#!/bin/bash while IFS="" read -d "" -r filename; do filearray[i++]="$filename" done < <(find . -maxdepth 1 -type f -iname "*.txt" -print0) printf '%s\n' "${filearray[0]}" 

Просто я просто хочу искать все файлы типа txt в определенном каталоге и помещать их в массив, который отображается в конце. Когда я бегу из командной строки, проблем нет. Это работает хорошо. Как только я выполню это через crontab, я получаю следующую ошибку:

 syntax error near unexpected token `<' `done < <(find . -maxdepth 1 -type f -iname "*.txt" -print0)' 

Вот сама запись cron:

 * * * * * . /usr/online/scripts/test.sh 2>> /usr/online/scripts/log/test.log 

Почему скрипт работает в командной строке, но не crontab? Я объявляю оболочку, поэтому, конечно, crontab должен использовать оболочку? Есть ли другая причина, почему я могу это сделать?

Джэкки

2 Solutions collect form web for “скрипт не работает в crontab”

command < <(other command) – это багизм . Поскольку вы указываете строку shebang, вы не должны указывать оболочку в своем crontab; это просто сбивает с толку. Вы должны сделать то или другое – я очень предпочитаю линию shebang, потому что вы явно указываете на синтаксис, который следует, вместо того, чтобы притворяться «универсальным» сценарием оболочки.

О, и убедитесь, что вы делаете свой исполняемый файл сценария и помещаете в поле команды crontab только /path/to/your/script.sh , а не sh /path/to/your/script.sh , sh < /path/to/your/script.sh или даже . /path/to/your/script.sh . /path/to/your/script.sh . Последние три игнорируют строку shebang и вместо этого запускают скрипт в контексте оболочки cron, независимо от того, что было настроено.

Подробнее о сохранении вывода сценария в файл см. Инструкции перенаправления .

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

 */15 * * * * /path/to/script.sh >/path/to/output 2>/path/to/errors 
  • Где работает этот cronjob?
  • cron найдет определенные команды на PATH, но не другие
  • проблема с работой cron каждые 2 минуты
  • почему /etc/cron.hourly/myjob не работает?
  • Выполнять параллельные параллельные параллели
  • cron каждый X точный смысл
  • Запускайте задание cron каждую минуту, имея в виду синтаксис
  • Команда crontab rtcwake не работает
  • Как преодолеть эту ошибку при запуске скрипта в crontab?
  • Где пользователи cronjob
  • crontab -e не работает
  • Interesting Posts

    Выполнение произвольной команды

    Является ли процесс с действующим или настоящим пользователем uid root по-прежнему подвержен битам разрешения файла при доступе к файлу?

    команда не найдена, ручка не работает для URL-адреса

    `find` multiple -o -name условие AND! -имя

    Плохие блоки только с удлинителем?

    Изменение пароля через linux PAM без запуска приложения как root

    Как вы получаете `pam_succeed_if.so` для распознавания пользователя` service`?

    MAC не соответствует IP-адресу в таблице `arp`: как устранить неполадки?

    Как изменить только mtime каталога?

    Рекурсивный ход (`mv -rn`, например` cp -rn`), перемещение, которое будет перемещать только файлы, не отображаемые

    Как отключить оптическую мышь usb от терминала Ubuntu 14.04?

    Ubuntu 14.04 сбой при подключении 2 мониторов

    Как индексирование работает с командой locate?

    Как работает mkswap? Что в заголовке свопа, который он создает?

    Как grep не последовательные шаблоны

    Linux и Unix - лучшая ОС в мире.