Я пытаюсь выполнить определенные команды, а также проверяю некоторые с помощью вложенных условий 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 вместо последовательного выполнения в неинтерактивном сеансе?.