Система 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
Не могу найти решение, может кто сталкивался и сможете помочь? Спасибо.
удалось воспроизвести такое поведение, добавив (в файле 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
Создайте файл /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
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Необходимо разделить html фрагмент кода на две части, при этом теги не должны обрезаться