cron создает некорректные файлы логов

101
20 апреля 2022, 23:50

Система ubuntu 18.04 linux nginx

Если выполнить команду в SSH консоли, то файл читаемый и корректный, но аналогичная команда в cron, создает нечитаемый файл.

Создал нормальный читаемый файл вида output.txt

SSH консоль:
php /www/mysite/filename.php > /www/mysite/output.txt

Создал некорректный файл вида 'output.txt'$'\r'

Cron
0 23 * * * php /www/mysite/filename.php > /www/mysite/output.txt

Постоянно приходится переименовывать файл командой, чтобы прочесть логи:

mv 'output.txt'$'\r' output.txt

Не могу найти решение, может кто сталкивался и сможете помочь? Спасибо.

Answer 1

удалось воспроизвести такое поведение, добавив (в файле crontab) перед концом строки символ \r (он же cr, он же carriage return, шестнадцатиричный код 0d). т.е., сделать «dos-овский» вариант окончания строки: \r\n.

в программе vim вернуть нормальные «unix-овские» окончания строк можно командой:

:set ff=unix

файл после этого надо будет сохранить:

:w

как сделать подобное в вашем любимом редакторе — смотрите в его документации.

вот так выглядит файл с «unix-овским» переводом строки:

$ cat goodcrontab
* * * * * touch /tmp/somefile
$ hexdump -C goodcrontab
00000000  2a 20 2a 20 2a 20 2a 20  2a 20 74 6f 75 63 68 20  |* * * * * touch |
00000010  2f 74 6d 70 2f 73 6f 6d  65 66 69 6c 65 0a        |/tmp/somefile.|
0000001e

а вот так с «dos-овским»:

$ cat /tmp/wrongcrontab
* * * * * touch /tmp/somefile
$ hexdump -C /tmp/wrongcrontab
00000000  2a 20 2a 20 2a 20 2a 20  2a 20 74 6f 75 63 68 20  |* * * * * touch |
00000010  2f 74 6d 70 2f 73 6f 6d  65 66 69 6c 65 0d 0a     |/tmp/somefile..|
0000001f
Answer 2

Создайте файл /usr/local/bin/myfilename.sh:

sudo cat > /usr/local/bin/myfilename.sh <<EOF
#!/usr/bin/sh
$(echo $(env) '/usr/bin/php /www/mysite/filename.php > /www/mysite/output.txt')
EOF
sudo chmod 755 /usr/local/bin/myfilename.sh

В cron прописываете:

0 23 * * *   /usr/local/bin/myfilename.sh
READ ALSO
laravel запрос аналогичный SQL

laravel запрос аналогичный SQL

Есть обычный SQL запрос:

163
Получение regexp через ajax

Получение regexp через ajax

у меня есть файл на сервере vajxphp содержащий переменные:

68
Разделить html фрагмент кода на две части

Разделить html фрагмент кода на две части

Необходимо разделить html фрагмент кода на две части, при этом теги не должны обрезаться

91