2010-07-08 9 views
0

Je suis en cours d'exécution du script ci-dessous avec Cron, en /etc/cron.d/mycron je les suivantes:script bash Cron quitte Cron [défunt] persistante

*/10 * * * * MyUserThatNeedsToRunTheScript /backup/sshconnect.sh 

Cependant, regardant ps -aux Je trouve que quelques processus [défunts] sont persistants, des idées? Est-ce que cela doit être fait avec SSH avec -f?

5  0 1598 641 20 0 2552 1068 pipe_w S ?   0:00 CRON 
4 1001 1599 1598 20 0  0  0 exit Zs ?   0:00 [sh] defunct 
5 1001 1601 1598 20 0  0  0 exit Z ?   0:00 [cron] defunct 
1 1001 1605  1 20 0 5148 884 poll_s Ss ?   0:00 /usr/bin/ssh -T -f -N -L7777:127.0.0.1:3306 [email protected] 

Cheers!

#!/bin/bash 
# Creates an SSH tunnel to allow local access to a remote mysql server. 
# Requires ssh keys for the user running the script or the user that CRON is setup under 

echo "*******************************" 
echo `date` 
user=tunnel 
server=100.123.124.125 
remote_port=3306 
local_port=7777 
createTunnel() { 
    /usr/bin/ssh -T -f -N -L${local_port}:127.0.0.1:${remote_port} ${user}@${server} 
    if [[ $? -eq 0 ]]; then 
    echo ${local_port} Tunnel to ${server} created successfully 
    else 
    echo An error occurred creating tunnel ${local_port} to ${server} RC was $? 
    fi 

} 
## Run the mysqladmin status command remotely. If it returns non-zero, then create a new connection 
echo Verifying Database Connection 
echo "----------------------------------" 
/usr/bin/mysqladmin -u test -ptest123 -h127.0.0.1 -P${local_port} status 
if [[ $? -ne 0 ]]; then 
    echo Creating new tunnel connection 
    createTunnel 
    exit 
else 
    echo Tunnel already exists 
    exit 
fi 
echo "*******************************" 

Répondre

1

Je pense qu'il est difficile de dire exactement ce qui a causé la disparition de vos processus. En général, je suggère d'utiliser autossh au lieu de ssh pour cette tâche.

J'ai trouvé la construction suivante très fiable pour la mise en place des tunnels (en /etc/rc.local):

while sleep 1; do 
    autossh $options $server 
done &

Je ne l'ai jamais connu en utilisant ce défunts.

Bonne chance :-)

0

Avez-vous essayé de mettre une déclaration de sortie à la fin de votre script ci-dessous l'écho? Cela peut aider ...

+0

Merci, mais j'ai essayé cela et cela ne fonctionne pas malheureusement :( – grandnasty

0

Dans les systèmes Unix et similaires, les zombies (processus déconnectés) sont provoqués par l'échec du processus parent à accepter le signal SIGCHLD généré par un processus enfant lorsqu'il se termine.

Ou, pour le dire autrement, le problème ne se trouve pas dans votre processus défunt, le problème est situé dans le processus parent qui l'a engendré.

+1

bien, mais comment pourrais-je résoudre ce problème? – grandnasty