/ bin / sh: - c: строка 0: неожиданный EOF при поиске соответствия `" ' - PullRequest
0 голосов
/ 01 марта 2020

Cron не может запустить работу и отправить мне это письмо:

title:

cd /var/www/www-root/data/www/mysite.com/laravel/ && find ./ -mtime -1 -type f -printf "

body:

/bin/sh: -c: line 0: unexpected EOF while looking for matching `"'  
/bin/sh: -c: line 1: syntax error: unexpected end of file

Я использую ISPmanager, и это Задание cron:

cd /var/www/www-root/data/www/mysite.com/nuxt/ && find ./ -mtime -1 -type f -printf "%p\n" | while read name ; do zip /var/www/www-root/data/www/mysite.com/laravel/storage/app/backup/nuxt_files.zip $name; done

Этот код прекрасно работает в s sh bash, и даже если я запускаю это задание cron, нажимая кнопку «Выполнить» в ISPmanager. Понятия не имею, что не так с cron.

1 Ответ

1 голос
/ 01 марта 2020

cron заменяет % символом новой строки перед отправкой команды в оболочку. Чтобы включить литерал %, вам необходимо экранировать его:

cd /var/www/www-root/data/www/mysite.com/nuxt/ && 
    find ./ -mtime -1 -type f -printf "<b>\%</b>p\n" |
      while read name ; do 
        zip /var/www/www-root/data/www/mysite.com/laravel/storage/app/backup/nuxt_files.zip $name; done

From man 5 crontab:

Знаки процента (%) в команде, если не экранировано с помощью backsla sh (), изменится на символы новой строки, и все данные после первого% будут отправлены команде в качестве стандартного ввода.

Итак, вы пытаетесь запустить первую команду ( с непревзойденным "), используя p\n" ... в качестве входа.

...