Quel est le problème avec mon rc.fichier local (Ubuntu)?
J'ai un python démon processus qui débute par rc.locaux. Ce même script, avec les mêmes autorisations, est installé sur quelques autres Ubuntu boîtes que j'ai. Il s'exécute sans mal sur ces installations. C'est, après le redémarrage de la box, le démon est en cours d'exécution.
Avec cette installation particulière cependant, le processus de démon n'est pas en cours d'exécution par le temps de me connecter et de vérifier l'existence du processus. Le rc.local de fichiers entre systèmes sont identiques (ou au moins assez proche):
localaccount@sosms:~$ cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
python /var/www/myDaemon/Main.py > /var/log/somelog.txt
exit 0
Les autorisations sont:
localaccount@sosms:~$ ls -la /etc/rc.local
-rwxr-xr-x 1 localaccount localaccount 370 Jun 3 11:04 rc.local
J'ai testé si le rc.processus local est d'obtenir exécutés à l'aide de ce test rc.local:
localaccount@sosms:/var/log/sosmsd$ cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
echo "test" > /home/localaccount/test1
/usr/bin/python /var/www/sosms/sosmsd/Main.py > /var/log/sosmsd/log/log
echo "test" > /home/localaccount/test2
exit 0
localaccount@sosms:/var/log/sosmsd$
Et seul le premier fichier de test (test1) est créé après le redémarrage de la box. Je suppose que cela signifie que le python de la ligne est à l'origine de certains type de problème, mais je n'obtiens aucun résultat dans /var/log/sosmsd/log/log:
localaccount@sosms:~$ ls
test1
Mise à jour:
J'ai ensuite suivi larsks les conseils et déterminée que j'ai fait cette erreur de lancer le script python:
mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
Est-ce à dire que le rc.local est en cours d'exécution avant de MySQL a eu la chance d'être initialisé? Où dois-je aller d'ici?
OriginalL'auteur kwikness | 2012-06-04
Vous devez vous connecter pour publier un commentaire.
Vous devez créer un script init
/etc/init.d/mydaemon
pour votre démon de squelette.Ensuite, vous serez en mesure de fixer son ordre de démarrage pour que MySQL est déjà disponible.
Ici est un bon point de départ.
OriginalL'auteur Yves Martin
Une chose que les autres personnes qui ont répondu à manquer dans votre rc, init, etc. les scripts qui sont exécutés au démarrage de la variable de CHEMIN d'accès peut ou ne peut pas être initialisé (il n'y a jamais une garantie), ce qui signifie simplying faire "python somescript.py" au lieu de /usr/bin/python peut ne pas toujours fonctionner. TOUJOURS utiliser des chemins absolus pour tout dans les scripts d'initialisation et les scripts rc.
Et oui, il est probable que le rc.local est exécuté avant mysqld est commencé. Vous devez définir cela comme un init.d un script au lieu et à l'utilisation insserv-les commentaires de style dans l'en-tête pour lui indiquer les dépendances dont il a besoin. http://manpages.ubuntu.com/manpages/lucid/man8/insserv.8.html
OriginalL'auteur hsanders
Python exceptions -- et la plupart des autres messages d'erreur -- aller à
stderr
, mais vous êtes seulement en redirigeantstdout
. Vous devriez être en cours d'exécution de votre service comme celui-ci:La
2>&1
indique l'interpréteur de commandes à envoyerstderr
de sortie à la même place questdout
. Faire ceci et poste des messages d'erreur vous de voir si le problème ne se termine pas être évident.OriginalL'auteur larsks
mes amis. J'ai passer plusieurs jours pour cette erreur. Heureusement, j'ai une solution.
Veuillez vous préférez le sudo manuel~
-je [commande]
Le -i (simuler de la première connexion) option exécute le shell spécifié par le mot de passe de la base de données d'entrée de l'utilisateur cible, comme un loginshell...
U peut préférer ce que je poste ici: Exécuter le script avec les rc.local: script fonctionne, mais pas au boot
Bonne chance!
OriginalL'auteur fantaxy025025
À partir de la base de données mysql docs:
C. 5.2.2. Ne peut pas se connecter à [local] serveur MySQL
L'erreur (2002) ne Peut pas se connecter à ... signifie normalement qu'il n'y a pas de serveur MySQL en cours d'exécution sur le système, ou que vous utilisez un mauvais nom de fichier de socket Unix ou TCP/IP numéro de port lors de la tentative de connexion au serveur. Vous devez également vérifier que le port TCP/IP que vous utilisez n'a pas été bloqué par un pare-feu ou le blocage du port de service.
Ne l' "/var/run/mysqld/mysqld.chaussette" fichier existe?
Est le serveur mysql sur le même serveur que le python processus de démon?
Avez-vous regardé le mysql log?
Il devrait être situé dans
/var/log/
Nommé quelque chose comme:
mysql.journal
mysql.err
mysqld.journal
mysqld.err
Une possibilité est que vous êtes hors de l'espace disque, essayez:
Look à la 4e colonne "Profiter"
Une autre possibilité est les autorisations de dossier, essayez de:
Vous devriez voir quelque chose comme ceci:
Vous les plus susceptibles de vouloir le propriétaire et le groupe d'être "mysql", si elles ne sont pas, vous pouvez essayer:
Notez les paramètres d'origine première de sorte que vous pouvez le modifier si cela n'aide pas. L'option "-R" signifie un changement de propriété de façon récursive pour les sous-dossiers et fichiers.
Les autorisations doivent être rwxr-xr-x (755), si non, vous pouvez essayer:
Je ne le ferais pas, de manière récursive, la plupart des fichiers et des dossiers ne doit être accessible à l'utilisateur mysql, éventuellement mysql groupe et uniquement en lecture/écriture non exécutable.
Vous avez raison, c'est pourquoi j'ai jusqu'a voté votre réponse quand vous l'avez posté. Mais j'ai quitté cette réponse que l'information peut être utile à quelqu'un dans le futur.
OriginalL'auteur codewaggle