在远程主机上执行的shell脚本

在远程主机上执行的shell脚本

我想testcmd.sh使用以下命令在远程主机(Testhost)上运行:

ssh test@Testhost 'bash -s' < /test/testcmd

但我收到以下错误:

!!!!!Running MASTERCMD!!!!!
bash: line 31: /test/PROCESSLIST: No such file or directory

我不想将PROCESSLIST文件放在 Testhost 本地。我该如何解决这个问题?


Cat Testcmd 如下:

echo "!!!!!Running MASTERCMD!!!!!"

RC=0
while read proc; do
        if (( 0 == $(ps -ef | grep -v grep | grep -c /test/$proc) )); then
                echo "!!!!! $proc down on  TU  !!!!!"
                RC=1
         else
           echo "!!!!!! $proc is still running on  TU!!!!!"
        fi
#echo "Not checked"

done < /test/PROCESSLIST

答案1

当脚本/test/testcmd在远程主机上运行时,它需要/test/PROCESSLIST远程主机中的文件,就像它需要本地主机中的文件一样(while [...]; do [...]; done < /test/PROCESSLIST)。

这就是错误所在,但进一步说,即使修复了这个问题,脚本也会崩溃,因为它还需要多个/test/$proc文件,这些文件的实际名称是在运行时根据/test/PROCESSLIST的内容确定的(if [...] grep -c /test/$proc [...]; then [...]; else [...]; fi)。

最后,您需要将本地/test文件夹复制到远程主机:

scp -r /test test@Testhost:/test

但是,您很可能需要成为远程主机的 root 才能将其复制到/

scp -r /test root@Testhost:/test

但是 root 可能被禁用/在远程主机上没有设置密码;因此,解决方法是复制test主目录中的文件夹并将其复制/sudo

scp -r /test test@Testhost:~/test
ssh -t test@Testhost sudo mv ~/test /test

相关内容