Ваш вопрос является вариацией FAQ Почему в systemd все работает иначе? .
Одним из преимуществ systemd
является то, что он обеспечивает согласованную среду выполнения. Во избежание ошибок в плане безопасности и простоты набор переменных среды минимален.
В соответствующих документах поsystemd
среде выполнения подробно описано, что установлено.
Вы упомянули, что ваша конфигурация находилась в домашнем каталоге root
. man mailx
подтверждает, что он ищет в ~/.mailrc
, в отличие от фиксированного пути /root/.mailrc
.
В документах systemd
поясняется, что переменная $HOME
устанавливается только при использовании директивы User=
. Вы не поделились своим служебным файлом systemd
, но я полагаю, что, поскольку вы запускаете задачу от имени пользователя root, вы не использовали директиву User=
. Так что это может объяснить часть вашей проблемы.
Также кажется, что путь, который вы хотите, не может быть установлен вашей $PATH
переменной окружения при запуске systemd
. Вы можете подтвердить это, заменив строку ExecStart=
в вашем сервисе на:
ExecStart=/bin/echo "My path is $PATH"
Если путь mailx
не указан, вы можете явно указать его с помощью директивы Environment=
.
Если эти подробные советы не помогли решить вашу проблему, обязательно ознакомьтесь с ответами на часто задаваемые вопросы, ссылка на которые приведена выше, чтобы узнать о дополнительных возможностях.
Гипотеза :файловая система нечувствительна к регистру и поэтому Mechanics
и mechanics
относятся к одному и тому же каталогу.
Возможно переименовать mechanics
в Mechanics
с помощью временного имени:
mv mechanics foo
mv foo Mechanics
Тогда каталог может отображаться как Mechanics
, но вы все равно сможете ссылаться на него как mechanics
или даже mECHaniCS
.
Ваш скрипт правильный, но у вас уже есть папка Mechanics в вашем текущем каталоге вместе с папкой mechanics , из-за которой вы получаете ошибку.