Então tive que modificar um pouco seus caminhos de comando, mas acredito que isso seja o que você quer. Mas primeiro, as modificações que eu precisava fazer no seu script:
#!/bin/bash
# Make sure we know when the trap fires.
trap 'printf "quiting with return code %d\n" "$?"; exit' INT
sleep 180 &
wait
trap '' INT
# Long running command
/usr/bin/sleep 86400
Depois, consegui fazer o que você queria, alterando seu segundo comando assim:
sh -c 'set -x; (exec kill --verbose -INT $(pgrep myscript.sh) 2>/dev/null); ! pgrep -x "myscript.sh" > /dev/null && /tmp/myscript.sh &'
E uma vez que você tenha verificado a execução dessa maneira funciona como esperado, você pode remover a instrução printf da primeira armadilha no script e executar o comando da seguinte forma:
sh -c '(exec kill -INT $(pgrep myscript.sh) 2>/dev/null); ! pgrep -x "myscript.sh" > /dev/null && /tmp/myscript.sh &'
Sem os parens na primeira instrução no comando acima, o que faz com que seja executado em um subshell, o processo sh
será substituído pelo processo kill
e a segunda instrução não será executada.