Другой простой альтернативный (для тех, кто не хочет / не знает 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, чтобы выдать целую строку, а не только имена Ваш вопрос является вариацией 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=
.
Если эти подробные советы не помогли решить вашу проблему, обязательно ознакомьтесь с ответами на часто задаваемые вопросы, ссылка на которые приведена выше, чтобы узнать о дополнительных возможностях.
Я использую 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>";
. Это исправило это для меня.