У меня есть следующая работа 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, и этот символ считается частью имени файла. Убедитесь, что ваш редактор использует правильные окончания строк.