У меня возникли проблемы с перенаправлением операторов C printf в файл с программой, запущенной как root.
У меня есть программа с несколькими информационными заявлениями printf и другими библиотеками, которые печатают ошибки через stderr. Я хотел бы записать их в файл. Если я запускаю программу из командной строки, я могу видеть сообщения stderr и stdout.
sudo ./myprogram
Если я попытаюсь перенаправить, так же,
sudo ./myprogram >> log_file 2>&1
Файл log_ содержит только stderr и stdout исчезает.
Я подозреваю, что проблема связана с тем, что пользователь root не подключен к stdout, но я не нашел решения.
Моя конечная цель - запустить эту программу при запуске системы с правами root, при записи stderr и stdout в файл log_file. Я пытаюсь использовать crontab,
sudo crontab -e
и добавляет строку,
@reboot bin/myprogram >> log_file 2>&1
Это генерирует сообщения stderr, но stdout исчезает, как и в командной строке. [!d8 ]
Любая помощь приветствуется, спасибо!
Edits & amp; Обновления: Тестирование сегодня утром, перенаправление ведет себя так же без sudo. Типичный оператор printf выглядит так:
printf("info: passed safety check\n");
Я использую настройку по умолчанию для ubuntu 14.04 на процессоре ARM, поэтому я считаю, что использую bash. Я подтвердил,
echo $SHELL
производит
/bin/bash
TLDP HowTo имеет этот хороший синтаксис для перенаправления как stdout, так и stderr:
@reboot /path/to/program &> /path/to/log
HowTo говорит, что это иногда подходит для записей cron.