Автоматические обновления не будут использовать mailx при запуске Systemd

Другой простой альтернативный (для тех, кто не хочет / не знает awk ) сценарий:

#!/bin/bash
sort -t',' -k 3 marathon | cut -d',' -f 3 | uniq -d

, если кто-то хочет напечатать целая строка вместо только имена:

#!/bin/bash
sort -t',' -k 3 marathon | cut -d',' -f 3 | uniq -d | grep -f - marathon

в сценариях поверх:

  • sort берет третье поле для сортировки, используя , в качестве разделителя от -t параметр и 3-е поле из -k параметр
  • вырезать команда просто вырезает третье поле, используя , в качестве разделителя
  • -d параметр для uniq просто печатает повторяющиеся строки, что и хотел автор вопроса - «Печатать повторяющийся узор»
  • -Параметр f принимает входные данные из канала (т.е. имена) и ищет его в файле marathon, чтобы выдать целую строку, а не только имена
3
16.04.2018, 17:20
2 ответа

Ваш вопрос является вариацией 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=.

Если эти подробные советы не помогли решить вашу проблему, обязательно ознакомьтесь с ответами на часто задаваемые вопросы, ссылка на которые приведена выше, чтобы узнать о дополнительных возможностях.

3
27.01.2020, 21:25

Я использую msmtpи bsd-mailxв Ubuntu 18.04, чтобы позволить unattended-upgradesприсылать мне по электронной почте обновления. Я думаю, что столкнулся с той же проблемой, что и вы. Я настроил msmtpи мог отправлять электронную почту с помощью mailxиз командной строки. unattended-upgradesтакже отправит мне электронное письмо, если я сам запущу его из командной строки, но если unattended-upgradesзапустится автоматически, я не получу электронное письмо. Глядя в журналы /var/log/msmtp/msmtp.logя увидел:

<DATE> host=<MY_SMTP_HOST> tls=on auth=on user=<MY_STMP_USERNAME> from=<MY_EMAIL_ADDRESS> recipients=<MY_EMAIL_ADDRESS> smtpstatus=550 smtpmsg='550 5.2.0 Mail format error: No domain in From header [1633]' errormsg='the server did not accept the mail' exitcode=EX_UNAVAILABLE

Таким образом, возникает проблема с настройкой From header. Погружаясь в это, оказывается, что адрес электронной почты from, используемый unattended-upgrades, по умолчанию имеет значение root, но вы можете определить это самостоятельно в /etc/apt/apt.conf.d/50unattended-upgrades, добавив Unattended-Upgrade::Sender "<EMAIL_ADDRESS>";. Это исправило это для меня.

2
22.04.2020, 13:48

Теги

Похожие вопросы