web-dev-qa-db-fra.com

NMCLI fonctionne dans un script lorsque je l'exécute directement, mais pas lorsqu'il est exécuté dans CRON

Ceci est sous Ubuntu 11.10

J'ai un script qui démarre une connexion PPTP VPN qui récupère quelques fichiers, puis ferme la connexion. Lorsque j'exécute ce script à partir d'une invite de terminal, cela fonctionne parfaitement. Cependant, lorsque je le programme pour qu'il s'exécute avec CRON, les commandes nmcli du script génèrent des erreurs. Les connexions VPN sont configurées pour être utilisées par n'importe quel utilisateur, pas seulement par mon compte.

Voici la ligne pertinente du script:

/usr/bin/nmcli con up id MyVPN

Et voici les erreurs générées lors de son utilisation dans CRON:

** (process:6360): WARNING **: _nm_object_get_property: Error getting 'WirelessHardwareEnabled' for /org/freedesktop/NetworkManager: (9) Rejected send message, 2 matched rules; type="method_call", sender=":1.624" (uid=1000 pid=6360 comm="/usr/bin/nmcli con up id MyVPN ") interface="org.freedesktop.DBus.Properties" member="Get" error name="(unset)" requested_reply="0" destination="org.freedesktop.NetworkManager" (uid=0 pid=1029 comm="NetworkManager ") ** (process:6360): WARNING **:

_nm_object_get_property: Error getting 'WwanHardwareEnabled' for /org/freedesktop/NetworkManager: (9) Rejected send message, 2 matched rules; type="method_call", sender=":1.624" (uid=1000 pid=6360 comm="/usr/bin/nmcli con up id MyVPN ") interface="org.freedesktop.DBus.Properties" member="Get" error name="(unset)" requested_reply="0" destination="org.freedesktop.NetworkManager" (uid=0 pid=1029 comm="NetworkManager ") ** (process:6360): WARNING **:

_nm_object_get_property: Error getting 'WimaxHardwareEnabled' for /org/freedesktop/NetworkManager: (9) Rejected send message, 2 matched rules; type="method_call", sender=":1.624" (uid=1000 pid=6360 comm="/usr/bin/nmcli con up id MyVPN ") interface="org.freedesktop.DBus.Properties" member="Get" error name="(unset)" requested_reply="0" destination="org.freedesktop.NetworkManager" (uid=0 pid=1029 comm="NetworkManager ") ** (process:6360): WARNING **:

_nm_object_get_property: Error getting 'State' for /org/freedesktop/NetworkManager: (9) Rejected send message, 2 matched rules; type="method_call", sender=":1.624" (uid=1000 pid=6360 comm="/usr/bin/nmcli con up id MyVPN ") interface="org.freedesktop.DBus.Properties" member="Get" error name="(unset)" requested_reply="0" destination="org.freedesktop.NetworkManager" (uid=0 pid=1029 comm="NetworkManager ")

Toute idée serait appréciée!

6
Walter Anderson

La raison pour laquelle nmcli ne traverse pas cron est due au fait que les détails du VPN ( nom d'utilisateur, mot de passe) résident dans les détails du compte de l'utilisateur dans le trousseau. Et nmcli nécessite DBus pour récupérer les informations.

Autrement dit, si vous souhaitez configurer votre système pour que nmcli fonctionne, vous devez faire en sorte que nmcli fonctionne avec l'environnement que CRON offre aux scripts.

Voir quelques exemples sur https://stackoverflow.com/questions/5819667/help-me-setup-a-cron-job-on-ubunt et aussi sur http: // ubuntuforums .org/showpost.php? p = 9016250 & postcount = 2 et https://wiki.archlinux.org/index.php/NetworkManager#Automatically_unlock_keyring_after_login

4
user4124

Je viens d'avoir un problème similaire, et aucune des réponses ci-dessus n'a fonctionné pour moi. J'ai fini par simuler le problème avec screen:

    * * * * * /usr/bin/screen -dm

Ajoutez la ligne ci-dessus à cron, laissez-le fonctionner une fois, éteignez-le. Connectez-vous à votre session d'écran (écran -r). Si vous vérifiez que la session d'écran a été créée (avec ps), sachez qu'elles sont parfois en majuscules (par exemple ps | grep SCREEN)

Maintenant, nmcli et similaire échouera.

En particulier, j’ai remarqué que mon problème était que nmcli dev wifi s’exécutait parfaitement, mais nmcli nm wifi on ne s’exécutait pas.

La solution pour moi était assez simple à la fin. J'ai ajouté un Sudo. Seulement nécessaire dans cron. Je ne sais pas pourquoi cela a résolu le problème.

1
Cookie

Sudo su avant crontab -e a travaillé pour moi.

0
nco