Невозможно выполнить несколько команд + вложенные, если в для l oop более s sh неинтерактивный сеанс - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь выполнить определенные команды, а также проверяю некоторые с помощью вложенных условий if через неинтерактивные подключения S SH к моим серверам в списке. Но, к сожалению, возникают синтаксические ошибки.

$ for i in $(cat servers);do ssh -t -l root ${i} 'hostname && grep BACKUPENABLE /var/cpanel/backups/config && if [[ $(ss -tulnp | grep rpc) ]] ; then echo -ne "RPCbind service is running \n$(cat /etc/exports)\n"; IP=$(awk -F'(' '{print $1}' /etc/exports | awk '{print $2}'); if [[ $( ping ${IP} -c1 > /dev/null) ]] ; then echo "NFS server responds"; else echo "NFS server not responding"; fi ; else -ne "No RPC and NFS backup not found\n"; fi && ss -tulnp | grep -vE "ssh|cpsrvd|pure-ftp|exim|httpd|named|dovecot|mysqld|snmp|ntp|java|spamd|cpdavd|State|rpc" && if [ -x /usr/sbin/csf ]; then echo csf present;else echo csf not present;fi && yum -q check-update kernel' 2> /dev/null;echo;done
-bash: syntax error near unexpected token `('

при проверке в режиме отладки

$ bash -x for i in $(cat servers);do ssh -t -l root ${i} 'hostname && grep BACKUPENABLE /var/cpanel/backups/config && if [[ $(ss -tulnp | grep rpc) ]] ; then echo -ne "RPCbind service is running \n$(cat /etc/exports)\n"; IP=$(awk -F'(' '{print $1}' /etc/exports | awk '{print $2}'); if [[ $( ping ${IP} -c1 > /dev/null) ]] ; then echo "NFS server responds"; else echo "NFS server not responding"; fi ; else -ne "No RPC and NFS backup not found\n"; fi && ss -tulnp | grep -vE "ssh|cpsrvd|pure-ftp|exim|httpd|named|dovecot|mysqld|snmp|ntp|java|spamd|cpdavd|State|rpc" && if [ -x /usr/sbin/csf ]; then echo csf present;else echo csf not present;fi && yum -q check-update kernel' 2> /dev/null;echo;done
-bash: syntax error near unexpected token `do'

Но что интересно, когда я запускаю набор команд на отдельном сервере, он дает ожидаемый результат нормально.

root@server [~]# hostname && grep BACKUPENABLE /var/cpanel/backups/config && if [[ $(ss -tulnp | grep rpc) ]] ; then echo -ne "RPCbind service is running \n$(cat /etc/exports)\n"; IP=$(awk -F'(' '{print $1}' /etc/exports | awk '{print $2}'); if [[ $( ping ${IP} -c1 > /dev/null) ]] ; then echo "NFS server responds"; else echo "NFS server not responding"; fi ; else -ne "No RPC and NFS backup not found\n"; fi && ss -tulnp | grep -vE "ssh|cpsrvd|pure-ftp|exim|httpd|named|dovecot|mysqld|snmp|ntp|java|spamd|cpdavd|State|rpc" && if [ -x /usr/sbin/csf ]; then echo csf present;else echo csf not present;fi && yum -q check-update kernel
server.host.com
BACKUPENABLE: 'no'
RPCbind service is running
/backups/serverpath    IP.x.x.x(rw,sync,no_root_squash,no_subtree_check)
NFS server not responding
udp    UNCONN     0      0                      *:44892                 *:*
udp    UNCONN     0      0                      *:2049                  *:*
udp    UNCONN     0      0                     :::36718                :::*
udp    UNCONN     0      0                     :::2049                 :::*
tcp    LISTEN     0      64                    :::2049                 :::*
tcp    LISTEN     0      64                     *:2049                  *:*
tcp    LISTEN     0      64                    :::45701                :::*
tcp    LISTEN     0      64                     *:38633                 *:*
csf present

kernel.x86_64                                                                  2.6.32-754.29.1.el6                                                                   updates

По сути, я не могу понять, в чем проблема. Разве S SH не может сгруппировать их или сломать в любой точке условий if вместо последовательного выполнения в неинтерактивном сеансе?.

...