我想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