У меня всё работает.
Попробуйте
strace -v -f -o log bash -c "cat file | od -An -t u1 -w1 -v > result.txt"
и либо сами посмотрите, что там происходит в момент открытия файла result.txt и дальше при попытках записи в него, либо выложите получившийся лог.
Обычно задачи ведения логов и их ротации разделяют: приложение/демон только ведёт лог в файле со сконфигурированным названием, а при получении специального сигнала закрывает текущий файловый дескриптор журнального файла и открывает новый. logrotate занимается ротацией логов, переименовывая их и посылая сигнал приложению.
Вероятно в системах с systemd за это отвечает не logrotate а какая-то приблуда systemd.
На отправляющей стороне посылать вместе с кавычками: echo '"Заголовок" "Текст сообщения"'
На принимающей использовать присланные кавычки по назначению: { a=`cat` && eval "notify-send $a"; }