Sin mirar demasiado el bit inotifywait
de 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 $name
será un nombre de ruta con un nombre de archivo al final que tiene el sufijo de nombre de archivo .MIX
.
Al tocar $name.BRD
se creará un archivo con un sufijo de nombre de archivo .MIX.BRD
, mientras que creo que es posible que desee reemplazar el sufijo .MIX
original por .BRD
.
Esto hace eso:
for name in /home/imp/imp/msgs/*.MIX; do
touch "${name%.MIX}.BRD"
done
${name%.MIX}
elimina .MIX
del 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 echo
a unprintf
(ya que está generando datos variables ), y de usar $path
en 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 inotifywait
y qué es $file
y qué desea hacer, puede ser suficiente tocar un archivo basado en $file
en lugar de recorrer todos los archivos en el directorio.
Похоже, вы пытаетесь ввести спецификацию задания 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
] означает.
Вы сделали много распространенных ошибок cron . Некоторые из них:
Всегда проверяйте синтаксис вашей команды, просматривайте журналы cron, проверяйте права доступа к файлам и каталогам.