исправлено добавлением этого в системный журнал -ng.service :После=network.target
https://bugzilla.redhat.com/show_bug.cgi?id=1309345
# cat /usr/lib/systemd/system/syslog-ng.service
[Unit]
Description=System Logger Daemon
Documentation=man:syslog-ng(8)
After=network.target
[Service]
Type=notify
Sockets=syslog.socket
ExecStart=/usr/sbin/syslog-ng -F -p /var/run/syslogd.pid
ExecReload=/bin/kill -HUP $MAINPID
StandardOutput=null
Restart=on-failure
[Install]
WantedBy=multi-user.target
Alias=syslog.service
Проблема в том, что $4
в программе awk
является частью строки в двойных кавычках. Поскольку он заключен в двойные кавычки, оболочка (local )раскроет его перед вызовом ssh
.
В оболочке $4
— 4-й позиционный параметр, который, скорее всего, пуст. Это означает, что $4
в коде awk
будет заменено пустой строкой, что приведет к созданию недопустимой программы awk
.
В этом случае нет необходимости запускать команду awk
на удаленном хосте. Вместо этого просто выполните
while IFS= read -r remote; do
ssh -n -o BatchMode=yes "$remote" 'df /var' | awk 'FNR == 2 && $5 > 80'
done </etc/gridhosts
Обратите внимание, что я изменил код awk
, чтобы он смотрел на $5
в строке 2, а не на $4
в каждой строке, так как именно здесь обычно находится процент. Кроме того, я удалил параметр -h
для df
, так как он не нужен, и я заставил цикл читать входной файл построчно, а не раскрывать полное содержимое файла в заголовке цикла for
. (что неэстетично и может в общем случае потреблять много памяти без необходимости ).
Вам также может быть интересно попробовать Ansible или аналогичное программное обеспечение, так как это значительно упростит выполнение -операций в масштабе кластера.