Назад | Перейти на главную страницу

Почему мое задание cron создает журнал со знаком вопроса в конце?

У меня есть следующая работа cron:

 */5 8-20 * * * php /var/www/user/cron_email.php >> /var/www/log/log.txt

Создает следующий файл:

david@ubuntu:/var/www/log$ ls -l
-rw-r--r-- 1 root root   540 2011-05-30 17:10 log.txt?

Почему появляется вопросительный знак в конце? Как я могу это остановить?

(Я вхожу в систему на консоли и вижу результаты без редактора, поэтому я знаю, что там есть знак «?».)

И это единственный файл, у которого в конце есть '?' так что я знаю, что это не проблема редактора. Я даже не использую никакого редактора, я просто смотрю на ЭЛТ-экран консоли.

Выполнение этой команды предоставит дополнительную информацию:

$ crontab -l | cat -tve

Я почти уверен, что вы увидите лишние символы в конце вывода, примерно так:

*/5 8-20 * * * php /var/www/user/cron_email.php >> /var/www/log/log.txtM-U$

знак доллара просто указывает на конец строки (опция -e для cat). Что-нибудь между .txt и $ это лишний мусор, вероятно, по причинам, указанным в других ответах.

Самый простой способ исправить это - установить $EDITOR в простой редактор и повторно отредактируйте файл crontab. Например:

$ EDITOR=/usr/bin/pico crontab -e

затем удалите все посторонние символы в конце строки.

В страница руководства из ls показывает, что если команда запускается внутри терминала, управляющие символы будут отображаться как '?' символ вместо фактического управляющего символа. В этом случае управляющий символ, вероятно, будет ошибочным переводом строки, оставленным вашим редактором, а не стандартным UNIX \n персонаж.

Вам необходимо настроить текстовый редактор для использования окончаний строк UNIX (LF) и не использовать CRLF, или использовать редактор командной строки visudo для изменения ваших cronjobs, который будет обрабатывать это автоматически.

Ваш редактор использует CRLF как EOL вместо просто LF, и этот символ считается частью имени файла. Убедитесь, что ваш редактор использует правильные окончания строк.