J'essaie d'empêcher l'utilisateur d'annuler le script en utilisant ctrl + c . Le script suivant s'exécute complètement, sauf que rsync
qui insiste pour mourir, affichant l'erreur Killed by signal 2
.
Est-il possible d'éviter rsync
de mourir ? Si oui, puis-je le mettre à l'arrière-plan, ou doit-il être au premier plan ?
script :
trap '' SIGINT SIGTERM SIGQUIT
cd /tmp
nohup rsync -e 'ssh -o LogLevel=ERROR' -av --timeout=10 --delete-excluded myapp.war myserver:/tmp/ < /dev/null > /tmp/teste 2> /tmp/teste2
let index=0
while [ $index -lt 400000 ]
do
let index=index+1
done
echo "script finished"
echo "index:$index"
Je suspecte que le canal ssh meurt avant que rsync
. Après la fin de la sortie de la strace
dans le pid de rsync
:
[...]
write(4, "\374\17\0\7", 4) = 4
select(5, NULL, [4], [4], {10, 0}) = 1 (out [4], left {9, 999998})
--- SIGINT (Interrupt) @ 0 (0) ---
--- SIGCHLD (Child exited) @ 0 (0) ---
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 255}], WNOHANG, NULL) = 12738
wait4(-1, 0x7fffaea6a85c, WNOHANG, NULL) = -1 ECHILD (No child processes)
rt_sigreturn(0xffffffffffffffff) = 0
select(0, NULL, NULL, NULL, {0, 400000}) = 0 (Timeout)
rt_sigaction(SIGUSR1, {SIG_IGN, [], SA_RESTORER, 0x3fcb6326b0}, NULL, 8) = 0
rt_sigaction(SIGUSR2, {SIG_IGN, [], SA_RESTORER, 0x3fcb6326b0}, NULL, 8) = 0
wait4(12738, 0x7fffaea6aa7c, WNOHANG, NULL) = -1 ECHILD (No child processes)
getpid() = 12737
kill(12738, SIGUSR1) = -1 ESRCH (No such process)
write(2, "rsync error: unexplained error ("..., 72) = 72
write(2, "\n", 1) = 1
exit_group(255) = ?
Process 12737 detached