Я получил несколько советов, которые помогли мне исправить ошибку. Некоторые могут счесть это обходным путем.
Я отредактировал команду, чтобы скрипт запускался от имени пользователя Pi:
void sendFile()
{
string command = "su pi -c \"/home/pi/emailscript " + lastFile + " " + emailAddress + "\"";
system(command.c_str());
}
«Правильным» решением могло бы быть включение конфигурации mutt в /root, но мне это не помогло.
Sudo не работает так, как вы ожидаете, с переадресацией и конвейерами. Если вы sudo свою команду, это будет sudo только часть до > . Либо выполните sudo bash - c "full command"
, либо временно станьте пользователем root с помощью sudo -s
и выполните свою команду.
Открытый файл не мешает вам редактировать его содержимое. Однако он не удаляет файл после его удаления.
Также обратите внимание на параметр copytruncate
для logrotate
Попробуйте:
sudo tee thefile </dev/null
или:
sudo truncate -s 0 thefile