невозможно запустить crontab. он выдает ошибку

Sin mirar demasiado el bit inotifywaitde su código, parece que la parte interna del ciclo toca un archivo basado en lo que hay en la variable name:

for name in /home/imp/imp/msgs/*.MIX; do
        touch "${name}.BRD"
done

El valor de $nameserá un nombre de ruta con un nombre de archivo al final que tiene el sufijo de nombre de archivo .MIX.

Al tocar $name.BRDse creará un archivo con un sufijo de nombre de archivo .MIX.BRD, mientras que creo que es posible que desee reemplazar el sufijo .MIXoriginal por .BRD.

Esto hace eso:

for name in /home/imp/imp/msgs/*.MIX; do
        touch "${name%.MIX}.BRD"
done

${name%.MIX}elimina .MIXdel final del valor de $name.

El código probablemente también carece de un |al final del comando inotifywait, para poder enviar su salida al bucle while read:

#!/bin/sh

inotifywait --daemon --outfile /home/imp/imp/test.log -m /home/imp/imp/msgs -e create |
while read path action file; do
    printf 'The file "%s" appeared in directory "%s" via "%s"\n' "$file" "$path" "$action"

    for name in "$path"/*.MIX; do
            touch "${name%.MIX}.BRD"
    done
done

Aquí, también me he tomado la libertad de cambiar el echoa unprintf(ya que está generando datos variables ), y de usar $pathen el bucle interno for, que espero sea correcto. El código no usa ninguna característica especial bash, así que también cambié el shell a /bin/sh.

Dependiendo de cómo funcione inotifywaity qué es $filey qué desea hacer, puede ser suficiente tocar un archivo basado en $fileen lugar de recorrer todos los archivos en el directorio.

-3
15.08.2017, 08:21
2 ответа

Похоже, вы пытаетесь ввести спецификацию задания crontab непосредственно в командной строке. Это не сработает.

Чтобы добавить задание crontab, используйте

$ crontab -e

для редактирования вашего crontab. Добавьте туда спецификацию задания, сохраните и выйдите из редактора.

Имеющаяся у вас спецификация задания

* * * * * ankush /home/ankush/test_script.sh

выглядит как системное задание crontab. То есть у него есть дополнительное шестое поле, которое является именем пользователя (см. руководство по crontab, man 5 crontab). Ваш собственный crontab не должен иметь этого.

Я считаю, что это то, что вы должны иметь в своем crontab:

* * * * * /home/ankush/test_script.sh

Это будет вызывать скрипт /home/ankush/test_script.shраз в минуту. Любой результат или ошибка этой работы должны быть отправлены вам по электронной почте.


Загадочное сообщение об ошибке возникает при попытке выполнить команду * * *(и т. д.) в оболочке. Это совершенно не связано с cron и вашим скриптом. Оболочка просто расширяет *для всех файлов в текущем каталоге и пытается запустить это как команду. Судя по всему, первое *расширяется до backup codebakи просто так получается, что backup— это имя какой-то команды, которая не понимает, что такое codebak] означает.

6
28.01.2020, 05:18

Вы сделали много распространенных ошибок cron . Некоторые из них:

  1. Неверный синтаксис команды в файле crontab
  2. Неверный путь к файлу сценария
  3. Нет прав на выполнение вашего файла сценария
  4. Использование необъявленных переменных в вашем профиле

Всегда проверяйте синтаксис вашей команды, просматривайте журналы cron, проверяйте права доступа к файлам и каталогам.

0
28.01.2020, 05:18

Теги

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