Eu tenho um computador Linux que remotamente o SSH usa plink em uma máquina Windows XP
. Eu tenho um programa Plink configurado para executar comandos em um script usando login automatizado:
plink -ssh [domain name] -l [username] -pw [password] -m commands.txt >> Outputtext.txt
commands.txt
contém apenas o seguinte
echo "Killing process"
ps -ef | grep 'processname' | awk ‘{print $2}’ | head -n 1' | xargs kill -9
sleep 2
echo "Restarting process"
processd &
echo "Exiting..."
Esse script simplesmente procura por um processname que o mata e o reinicia. Ele funciona toda vez que o processo é iniciado no linux antes de eu executar o script. No entanto, se o processo NÃO for iniciado, ele realmente destruirá o terminal de controle e sairá do plink.exe
no comando ps -ef
.
Reduzi para quando eu estou fazendo o ps -ef | grep 'processname'
ele retornará dois PIDs é o processo que estou procurando, e o outro é o próprio PID do processname grep
Quando o processo não é iniciado, ele retornará apenas um PID grep 'processname'
e acho que kill -9
está eliminando isso e, de alguma forma, eliminando a conexão plink ou o terminal de controle? Existe alguma maneira de contornar isso?
ou para verificar se grep 'processname'
retorna 2 linhas, o que significa que o processo foi iniciado ou, se houver apenas uma linha, não a mate.
Não tenho certeza se posso echo "#!bash"
um script bash e depois executar o script bash?
Ou isso é um bug estranho no plink?