agendando trabalhos sobre ssh com não funcionando corretamente

0

Estou tentando escrever um script para agendar interrupções em hosts remotos usando ssh e no comando scheduling.

script no host local:

 #!/bin/bash
    echo -n "Outage start >> "
    read starttime
    echo -n "Outage end >> "
    read endtime
    echo " ### remote1 ###"
    ssh -t  jenkins@remote01 \       
          sh -c "echo ~/echo4.sh | at $starttime ;  echo ~/echo5.sh | at $endtime ; atq > ~/check-atq \
          &&  echo ' Jobs in remote1 :  ' &&  cat ~/check-atq"
    echo " ### remote1 ssh ended 'date' ###"
    #other remote hosts follows...
    exit 0;

saída é

job 89 at 2017-09-13 11:19
job 90 at 2017-09-13 11:20
 Jobs in remote1 :
89     2017-09-13 11:19 a jenkins
90     2017-09-13 11:20 a jenkins
Connection to remote1 closed.
 app1 done Wed Sep 13 11:18:17 CEST 2017

No host remoto, ele deve gravar alguma saída no arquivo, pois eu queria verificar se ele realmente foi executado e se as permissões do usuário estão corretas para minhas necessidades

echo4.sh

#!/bin/bash
echo "--Start of scheduling-----" &>> ./date-log
date &>> ./date-log
sleep 10s
date &>> ./date-log
echo "---4---" >> ./date-log
whoami &>> ./date-log
echo "######end of first part############" &>> ./date-log
exit;

echo5.sh

 #!/bin/bash
    date &>> ./date-log
    sleep 10s
    date &>> ./date-log
    echo "---5----" &>> ./date-log
    whoami &>> ./date-log
    echo "#######end of scheduling###########" &>> ./date-log
    exit;

Ele está agendado como deveria ser sem nenhum problema, os trabalhos são agendados quando eu verifico atq, e após o tempo de execução parece que eles funcionam bem, pois não estão mais no atq Mas o arquivo4 ainda está lá e o log de dados tem apenas

Wed Sep 13 10:56:00 CEST 2017
Wed Sep 13 10:56:10 CEST 2017
---5----
jenkins
#######5###########
Wed Sep 13 11:20:00 CEST 2017
Wed Sep 13 11:20:10 CEST 2017
---5----
jenkins
#######end of scheduling###########

Mas quando eu corro localmente no remoto como este funciona

rm -f date-log ; echo ~/echo4.sh | at 11:38 ; echo ~/echo5.sh | at 11:39 
cat date-log; 
--Start of scheduling-----
Wed Sep 13 11:38:00 CEST 2017
Wed Sep 13 11:38:10 CEST 2017
---4----
jenkins
Wed Sep 13 11:39:00 CEST 2017
Wed Sep 13 11:39:10 CEST 2017
---5----
jenkins
#######end of scheduling###########

Eu não tenho ideia do motivo pelo qual o primeiro trabalho não é executado quando está agendado para o ssh e, até onde eu sei, não há registro para

EDITAR: Uma solução possível é alterar o script no host local para agendar mais um trabalho. Como descobri que o primeiro não é inserido na fila de tarefas corretamente.

ssh -t jenkins@remote1 sh -c "echo /home/user/echo5.sh | at $starttime ;  echo /home/user/echo4.sh | at $starttime ;  echo /home/user/echo5.sh | at $endtime ; touch ~/tmpfile4 ~/tmpfile5 ;atq > /home/user/check-atq; echo ' Jobs in remote1:  ';  cat /home/user/check-atq"

quando tento listar comandos em jobs, não há comando para o primeiro

for j in $(atq | sort -k6,6 -k3,3M -k4,4 -k5,5 |cut -f 1); do atq |grep -P "^$j\t" ;at -c "$j" | tail -n 5; done | tail -18
[root@remote1 jenkins]#
    213     2017-09-13 14:13 a jenkins
    }
    ${SHELL:-/bin/sh} << 'marcinDELIMITER78d343ff'


    marcinDELIMITER78d343ff
    214     2017-09-13 14:13 a jenkins
    }
    ${SHELL:-/bin/sh} << 'marcinDELIMITER7d6580d5'
    /home/user/echo4.sh

    marcinDELIMITER7d6580d5
    215     2017-09-13 14:15 a jenkins
    }
    ${SHELL:-/bin/sh} << 'marcinDELIMITER0035d156'
    /home/user/echo5.sh

    marcinDELIMITER0035d156

IMHO, problema será no comando ssh ou perfil no host remoto, não hesite em sugerir quaisquer alterações e dicas para melhorar como é o meu primeiro script de shell 'bom'

EDIT2: solução útil - adicionando algum comando aleatório como o primeiro, então funciona bem (para a curiosidade - comando aleatório, eu escolho a data, executado também). Mas ainda é interessante saber o que estava errado.

 #!/bin/bash
    echo -n "Outage start >> "
    read starttime
    echo -n "Outage end >> "
    read endtime
    echo " ### remote1 ###"
    ssh -t  jenkins@remote01 \       
          sh -c "date > test ; echo ~/echo4.sh | at $starttime ;  echo ~/echo5.sh | at $endtime ; atq > ~/check-atq \
          &&  echo ' Jobs in remote1 :  ' &&  cat ~/check-atq"
    echo " ### remote1 ssh ended 'date' ###"
    #other remote hosts follows...
    exit 0;
    
por teonanacatl 13.09.2017 / 12:12

0 respostas