Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/07/2012, à 08:46

kironux

[Résolu]Crontab root sans les droits

Bonjour,

J'ai un petit problème avec crontab en root.

Alors voilà mon problème :

J'ai quelques problèmes de connexion Wi-Fi (clé Wi-Fi correcte, "Connexion automatique" activée, mais perte du signal Wi-Fi), j'ai décidé de faire un script qui vérifie si la connexion est bien active.
Dans le cas contraire (blocage à la demande de la clé) : relancer entièrement network-manager afin qu'il enlève ses demandes de clé Wi-Fi.

Voilà le script :

#!/bin/bash

log_file="/var/log/connectlog"

if ping -c 5 8.8.8.8
then
echo "Connexion active le $(date)" >> $log_file
else
echo "Connexion inactive le $(date)" >> $log_file
echo "***** Relancement du service le $(date) *****" >> $log_file
/etc/init.d/network-manager restart >> $log_file
echo "***** Fin du relancement du service le $(date) *****" >> $log_file
fi

(disons que l'on enregistre le script dans .wifi.sh)
(On oublie pas de le rendre exécutable :

chmod +x .wifi.sh

)

On doit mettre le script dans le cron de l'utilisateur root (pour pouvoir redémarrer les services) :

sudo su
crontab -e

Et là on ajoute la ligne, en fin de fichier (disons que mon nom de compte est kironux) :

*/5 * * * * bash /home/kironux/.wifi.sh

(Il vérifie toutes les 5 minutes que la connexion est active)

http://forum.ubuntu-fr.org/viewtopic.ph … 1#p9589331
(Oui, c'est moi-même)

Les logs sont bien écrits, pas de soucis, et lors du relancement du service, j'ai ceci :

Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service network-manager restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) and then start(8) utilities,
e.g. stop network-manager ; start network-manager. The restart(8) utility is also available.

Et le service n'est pas redémarré...
Lorsque je lance la commande "/etc/init.d/network-manager restart" manuellement, j'ai le même message mais qui m'indique que le processus s'est arrêté puis redémarré :

Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service network-manager restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) and then start(8) utilities,
e.g. stop network-manager ; start network-manager. The restart(8) utility is also available.
network-manager stop/waiting
network-manager start/running, process XXXXXX

(J'ai déjà essayé avec "service network-manager restart" dans le script, et rien n'y fait)

J'ai pourtant testé plusieurs scripts différents, et ces derniers, lancés via le crontab de root, ont bien les droits pour écrire/supprimer/modifier des fichiers accessibles que par root.

Ma question est donc, pourquoi il y a un blocage au niveau du redémarrage du service ?

Dernière modification par kironux (Le 20/07/2012, à 17:52)

Hors ligne

#2 Le 16/07/2012, à 10:43

rescue

Re : [Résolu]Crontab root sans les droits

Bonjour,

Mon avis personnel :
Je pense qu'il vaudrait mieux se pencher sur le pourquoi de la "perte du signal Wi-FI".
- Carte réseau ?
- distance avec le point d’accès ?
- La box qui gère le point d'accès ?

@+

Hors ligne

#3 Le 16/07/2012, à 11:22

kironux

Re : [Résolu]Crontab root sans les droits

Bonjour,

Merci pour la réponse rapide wink

Carte réseau, possible, mais le problème ne se présente pas les fois où je suis près du point d'accès.
La distance, je suis tout juste à la limite, d'où le fait que j'ai des coupures régulières, et nm-applet bloque la reconnexion en demandant de vérifier la clé (au bout de quelques tentatives de connexion).
Pour couper court à cette demande, j'ai fait le script afin qu'il relance nm-applet et retente la connexion sans s'occuper de la clé (comme si s'était au premier démarrage).

La *box, c'est une Livebox Pro Sagem V2, ces temps-ci elle a beaucoup de déconnexions (sessions PPP qui ne durent pas plus de 6/7 heures), firmware à jour.

Hors ligne

#4 Le 16/07/2012, à 11:29

rescue

Re : [Résolu]Crontab root sans les droits

Re,

Donc la cible de ton problème est la distance par rapport au point d'accès.
C'est la dessus qu'il faudra travailler.

Quelle est la distance entre ton PC et la box ?
Pourquoi ne pas essayer de brancher la livebox un peu plus près ?
@+

Hors ligne

#5 Le 16/07/2012, à 11:57

kironux

Re : [Résolu]Crontab root sans les droits

Re,

La distance, oui, seulement j'ai rapproché la machine du point d'accès, elle a suffisamment de réception du signal pour le capter.
Après, il y a une belle dalle bien épaisse en béton, et je ne peux pas rapprocher la *box, car elle est connectée à la seule prise fax (liaison internet présente sur le NDI du fax) de la maison hmm

Mais pourquoi est-ce que le service n'est pas redémarré ? (je vais tenter la vérification du PID avant de le killer le comparer après, je ferais le test ce soir)

Hors ligne

#6 Le 16/07/2012, à 12:19

rescue

Re : [Résolu]Crontab root sans les droits

Re,

Pour le redémarrage du service, c'est une commande du superutilisateur il faudra placer sudo.

sudo service network-manager restart

Si tu veux que root l’exécute il te faudra mettre un mot de passe à root.
Chose a ne pas faire sous ubuntu, mais comme c'est ton PC rien ne te l’empêche.

Sinon tu peux faire le cron avec ton nom user.
Même commande : sudo service network-manager restart
Et pour le mot de passe il faudra éditer le fichier /etc/sudoers avec la commande :

sudo visudo

Chose à ne pas faire sous ubuntu non plus, mais comme c'est ton PC rien ne te l’empêche.

# User privilege specification
root    ALL=(ALL) ALL <br />
ton_username ALL=(ALL) NOPASSWD:ALL

@+

Dernière modification par rescue (Le 16/07/2012, à 12:20)

Hors ligne

#7 Le 16/07/2012, à 13:11

kironux

Re : [Résolu]Crontab root sans les droits

Mais il fera sa demande de mot de passe dans le vide, non ?

J'utilise ce script justement car il permet de relancer le service sans que je sois présent.

Mais bref, ce soir j'installe wicd (que j'ai longtemps utilisé sur d'anciennes versions d'Ubuntu et qui lorsqu'on coche "Connexion automatique", il retente la connexion et ne reste pas à attendre une clé Wi-Fi qui n'est jamais changée) et je vire network-manager, j'en ai raz-le-bol d'avoir ce soucis >.<

Merci pour ton aide wink

Dernière modification par kironux (Le 16/07/2012, à 13:15)

Hors ligne

#8 Le 16/07/2012, à 13:34

rescue

Re : [Résolu]Crontab root sans les droits

Re,

Mais il fera sa demande de mot de passe dans le vide, non ?

Il ne fera pas de demande de mot de passe justement il exécutera la commande tout simplement.

Bon courage.
@+

Hors ligne

#9 Le 16/07/2012, à 14:03

Postmortem

Re : [Résolu]Crontab root sans les droits

rescue a écrit :

Chose à ne pas faire sous ubuntu non plus, mais comme c'est ton PC rien ne te l’empêche.

# User privilege specification
root    ALL=(ALL) ALL <br />
ton_username ALL=(ALL) NOPASSWD:ALL

Salut,
Il y a moyen d'éviter la demande de mot de passe juste pour le script ou la commande voulue.
Plus d'infos ici
C'est moins risqué que de supprimer la demande de mot de passe pour toutes les commandes.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#10 Le 16/07/2012, à 15:26

kironux

Re : [Résolu]Crontab root sans les droits

Le soucis c'est que c'est un script bash, et donc je dois autoriser l'exécutable /bin/bash, ça n'est pas dangereux pour le reste des manipulations (logiciels utilisés depuis un processus bash ayant des droits roots) ? yikes

Hors ligne

#11 Le 16/07/2012, à 15:39

Postmortem

Re : [Résolu]Crontab root sans les droits

Tu n'as besoin des droits admin que pour /etc/init.d/network-manager il me semble.
Pas besoin des droits admin pour tout ton script.

Tu lances ton script avec ton user, puis dans ton script, tu appelles sudo /etc/init.d/network-manager ...
Ainsi, tu n'as à modifier le comportement de sudo que pour /etc/init.d/network-manager.

Sinon, si tu veux les droits admin pour tout ton script, c'est bien ton script que tu dois renseigner dans /etc/sudoers et non pas /bin/bash (à moins que tu le lances en faisant : bash ton_script)

Edit :
Si ton script a les droits d'exécution et que sa première ligne est #!/bin/bash, tu peux le lancer en faisant : /chemin/ton_script.
Pas besoin de faire : bash /chemin/ton_script

Dernière modification par Postmortem (Le 16/07/2012, à 15:41)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#12 Le 16/07/2012, à 16:15

kironux

Re : [Résolu]Crontab root sans les droits

Ok, ok, j'ai bien compris, l'interpréteur permet d'éviter le soucis que j'ai exposé, merci pour l'explication wink

J'avais en effet utilisé la syntaxe :
bash /path/to/script
Mais vu que l'interpréteur est déjà présent, je n'aurais pas besoin de préciser l'interpréteur, comme tu l'as expliqué.

Merci ! smile

J'ai continué à faire des tests sur un Ubuntu en local.

Le script utilisé :

#!/bin/bash

log_file="/var/log/connectlog"

if ping -c 5 0.0.0.1
then
echo "Connexion active le $(date)" >> $log_file
else
echo "Connexion inactive le $(date)" >> $log_file
echo "PID Avant" >> $log_file
pgrep NetworkManager >> $log_file
echo "***** Relancement du service le $(date) *****" >> $log_file
/etc/init.d/network-manager restart >> $log_file
echo "***** Fin du relancement du service le $(date) *****" >> $log_file
echo "PID Après" >> $log_file
pgrep NetworkManager >> $log_file
fi

(On tombera forcément dans le else)

Le PID ne change pas (que j'utilise /etc/init.d/network-manager restart ou service network-manager restart).
Lorsque j'appelle le script directement en ligne de commande, le PID change.



J'ai donc testé en adaptant le crontab comme tu l'as précisé.
Avant :
* * * * * bash /root/reload.sh
Après :
* * * * * /root/reload.sh
Le PID ne change toujours pas hmm

Hors ligne

#13 Le 16/07/2012, à 16:34

Postmortem

Re : [Résolu]Crontab root sans les droits

Ton script est lancé par la crontab de root ou par celle de ton user ?
Lorsque tu le lances en ligne de commande, tu es connecté en root ou avec ton user et tu utilises donc sudo ?


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#14 Le 16/07/2012, à 16:53

kironux

Re : [Résolu]Crontab root sans les droits

Le crontab est celui du root.

En ligne de commande, la commande fonctionne quand je l'utilise depuis sudo et fonctionne également lorsque je suis en root directement (sudo su).

J'ai donc tenté la manipulation proposée :

J'ai enlevé la ligne du crontab de root.
J'ai utilisé le crontab de l'utilisateur :
* * * * * /home/kironux/reload.sh
J'ai mis les droits d'exécution sur le script.
Le propriétaire du script est bien l'utilisateur.
-rwxr-xr-x 1 kironux kironux 494 2012-07-16 15:47 .wifi.sh*

J'ai adapté le fichier /etc/sudoers depuis visudo :

root    ALL=(ALL:ALL) ALL
kironux    ALL=/home/kironux/.wifi.sh

J'ai ceci dans /var/log/connectlog :

Connexion inactive le lundi 16 juillet 2012, 16:47:02 (UTC+0200)
PID Avant
3954
***** Relancement du service le lundi 16 juillet 2012, 16:47:02 (UTC+0200) *****
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service network-manager restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) and then start(8) utilities,
e.g. stop network-manager ; start network-manager. The restart(8) utility is also available.
***** Fin du relancement du service le lundi 16 juillet 2012, 16:47:02 (UTC+0200) *****
PID Après
3954

J'ai ceci dans les mails (j'ai installé le paquet mailutils) :

Message 1:
From kironux@host Mon Jul 16 16:47:02 2012
Envelope-to: kironux@host
Delivery-date: Mon, 16 Jul 2012 16:47:02 +0200
From: root@host (Cron Daemon)
To: kironux@host
Subject: Cron <kironux@host> /home/kironux/reload.sh
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/kironux>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=kironux>
Date: Mon, 16 Jul 2012 16:47:02 +0200

connect: Invalid argument
/etc/init.d/network-manager: 85: start: not found

J'ai ceci dans /var/log/syslog :

Jul 16 16:47:01 host CRON[5439]: (kironux) CMD (/home/kironux/reload.sh)








J'ai donc décidé de quand même préciser le bash dans le cron :
* * * * * bash /home/kironux/reload.sh
(Vu que j'ai vu ceci dans le mail :
<PATH=/usr/bin:/bin>)
Rien n'y fait le problème persiste, les PID ne changent pas (et j'ai les mêmes erreurs) sad

EDIT : Il m'indique une erreur que je n'avais pas avant, je vais voir d'où cela vient hmm
EDIT 2 : Malgré l'erreur, le processus est bien relancé lorsque je lance le script en ligne de commande (via sudo ou directement en root) (je voulais tester juste le simple fonctionnement du script)

J'avoue que je suis un peu perdu sur le pourquoi du comment hmm


Lorsque je lance directement le script en ligne de commande j'ai ceci dans /var/log/connectlog :

Connexion inactive le lundi 16 juillet 2012, 17:00:01 (UTC+0200)
PID Avant
5902
***** Relancement du service le lundi 16 juillet 2012, 17:00:01 (UTC+0200) *****
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service network-manager restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) and then start(8) utilities,
e.g. stop network-manager ; start network-manager. The restart(8) utility is also available.
network-manager stop/waiting
network-manager start/running, process 6005
***** Fin du relancement du service le lundi 16 juillet 2012, 17:00:01 (UTC+0200) *****
PID Après
6005


Merci pour l'aide smile

Dernière modification par kironux (Le 16/07/2012, à 17:13)

Hors ligne

#15 Le 16/07/2012, à 17:03

Postmortem

Re : [Résolu]Crontab root sans les droits

Je propose un truc mais je ne suis pas sûr...
Essaie de rajouter au début de ton script, juste sous #!/bin/bash, cette ligne :

. $HOME/.bashrc

Edit : il s'agit bien d'un point, suivi d'une espace puis de $HOME/.bashrc

Cela va initialiser les variables d'environnement que tu as normalement lorsque tu ouvres un Terminal.

Tu ajoutes sudo devant la commande /etc/init.d/network-manager restart
Dans /etc/sudoers, tu configure afin que le mot de passe ne soit pas demandé pour la commande /etc/init.d/network-manager.

Puis, dans la crontab de ton user, tu appelles le script ainsi :

* * * * * /home/kironux/reload.sh

Dernière modification par Postmortem (Le 16/07/2012, à 17:05)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#16 Le 16/07/2012, à 17:37

kironux

Re : [Résolu]Crontab root sans les droits

Ok, merci, je vais essayer ça de suite smile

EDIT :

J'ai ceci dans /var/log/syslog :

Jul 16 17:12:01 host CRON[6415]: (kironux) CMD (/home/kironux/reload.sh)

J'ai ceci dans /var/log/connectlog :

Connexion inactive le lundi 16 juillet 2012, 17:12:01 (UTC+0200)
PID Avant
6005
***** Relancement du service le lundi 16 juillet 2012, 17:12:01 (UTC+0200) *****
***** Fin du relancement du service le lundi 16 juillet 2012, 17:12:01 (UTC+0200) *****
PID Après
6005

J'ai ceci dans mes mails :

Message 1:
From kironux@host Mon Jul 16 17:12:01 2012
Envelope-to: kironux@host
Delivery-date: Mon, 16 Jul 2012 17:12:01 +0200
From: root@host (Cron Daemon)
To: kironux@host
Subject: Cron <kironux@host> /home/kironux/reload.sh
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/kironux>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=kironux>
Date: Mon, 16 Jul 2012 17:12:01 +0200

connect: Invalid argument
sudo: no tty present and no askpass program specified

J'ai trouvé ceci :
http://stackoverflow.com/questions/2576 … s-path-why
Ça a un rapport ? yikes

Dernière modification par kironux (Le 16/07/2012, à 17:37)

Hors ligne

#17 Le 16/07/2012, à 17:44

Postmortem

Re : [Résolu]Crontab root sans les droits

Il est en effet possible que ça soit lié à un problème d'environnement. C'est souvent le cas quand un script fonctionne directement dans le terminal et pas dans la crontab.

sudo: no tty present and no askpass program specified

Ceci me fait dire que tu as peut-être mal configuré sudo, j'ai l'impression qu'il veut quand même un mot de passe... Mais je peux me tromper !

Pour l'histoire d'environnement, je passe la main, je ne sais plus trop quoi te conseiller !

Edit :
Es-tu certain d'avoir ajouté la ligne correctement car ton environnement me semble assez restreint d'après ton mail ; il faut mettre un point, suivi d'une espace puis $HOME/.bashrc au début du script :

#!/bin/bash
. $HOME/.bashrc
... Suite du script

Dernière modification par Postmortem (Le 16/07/2012, à 17:51)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#18 Le 17/07/2012, à 11:27

kironux

Re : [Résolu]Crontab root sans les droits

Voilà le tout résumé :

Contenu du fichier /home/kironux/reload.sh :

#!/bin/bash
. $HOME/.bashrc

log_file="/var/log/connectlog"

echo "PID Avant :`pgrep NetworkManager` " >> $log_file
/etc/init.d/network-manager restart >> $log_file
echo "PID Apres :`pgrep NetworkManager` " >> $log_file

Les droits sur le fichier /var/log/connectlog :

-rw-r--r-- 1 kironux kironux 0 2012-07-17 11:11 /var/log/connectlog

Les droits sur le script reload.sh (après l'avoir rendu exécutable avec la commande "chmod +x reload.sh") :

-rwxrwxr-x 1 kironux kironux 220 2012-07-17 11:11 reload.sh*

Le crontab de l'utilisateur kironux :

* * * * * /home/kironux/reload.sh

(Aucune autre ligne, mise à part les commentaires déjà présents dans le fichier)

Je vérifie le fichier /etc/sudoers, et j'ai ceci :

root    ALL=(ALL:ALL) ALL
kironux    ALL=/home/kironux/reload.sh,/etc/init.d/network-manager restart

J'attends que le cron se déroule, et j'obtiens ceci :

Le contenu du fichier /var/log/syslog :

Jul 17 11:16:01 host CRON[15626]: (kironux) CMD (/home/kironux/reload.sh)

Mail reçu dans /var/mail/kironux :

Message 1:
From kironux@host Tue Jul 17 11:16:02 2012
Envelope-to: kironux@host
Delivery-date: Tue, 17 Jul 2012 11:16:02 +0200
From: root@host (Cron Daemon)
To: kironux@host
Subject: Cron <kironux@host> /home/kironux/reload.sh
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/kironux>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=kironux>
Date: Tue, 17 Jul 2012 11:16:02 +0200

/etc/init.d/network-manager: 85: start: not found

Contenu du fichier /var/log/connectlog :

PID Avant :6005 
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service network-manager restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) and then start(8) utilities,
e.g. stop network-manager ; start network-manager. The restart(8) utility is also available.
PID Apres :6005

Lorsque je lance le script en tant qu'utilisateur kironux (via la commande "./reload.sh") :

stop: Rejected send message, 1 matched rules; type="method_call", sender=":1.4696" (uid=1002 pid=15758 comm="stop network-manager ") interface="com.ubuntu.Upstart0_6.Job" member="Stop" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

Logique, je n'ai pas les droits, et le contenu de /var/log/connectlog m'indique que le PID ne change pas, c'est le même message que précédemment.

En root, je lance le script et j'obtiens :

PID Avant :6005 
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service network-manager restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) and then start(8) utilities,
e.g. stop network-manager ; start network-manager. The restart(8) utility is also available.
network-manager stop/waiting
network-manager start/running, process 15790
PID Apres :15790

EDIT :
J'ai récemment découvert la commande "command", et j'obtiens ceci directement en cli :

kironux@host:~$ command -v "/etc/init.d/network-manager restart"
/etc/init.d/network-manager
/sbin/restart

J'ai adapté le script reload.sh :

#!/bin/bash
. $HOME/.bashrc

log_file="/var/log/connectlog"

echo "PID Avant :`pgrep NetworkManager` " >> $log_file
/etc/init.d/network-manager restart >> $log_file
echo "PID Apres :`pgrep NetworkManager` " >> $log_file

command -v "/etc/init.d/network-manager restart" >> $log_file

Mail reçu dans /var/mail/kironux :

Message 1:
From kironux@host Tue Jul 17 11:36:01 2012
Envelope-to: kironux@host
Delivery-date: Tue, 17 Jul 2012 11:36:01 +0200
From: root@host (Cron Daemon)
To: kironux@host
Subject: Cron <kironux@host> /home/kironux/reload.sh (failed)
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/kironux>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=kironux>
Date: Tue, 17 Jul 2012 11:36:01 +0200

/etc/init.d/network-manager: 85: start: not found

Contenu du fichier /var/log/connectlog :

PID Avant :15790 
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service network-manager restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) and then start(8) utilities,
e.g. stop network-manager ; start network-manager. The restart(8) utility is also available.
PID Apres :15790

Rien ne change sad

Je vais tenter de bidouiller encore un peu pour savoir ce qui est vraiment exécuté wink


EDIT 2 :
J'ai suivi ceci :
http://www.cyberciti.biz/tips/allow-a-n … -root.html
Alors j'ai adapté /etc/sudoers :

root    ALL=(ALL:ALL) ALL
kironux    ALL= NOPASSWD: /home/kironux/reload.sh,/etc/init.d/network-manager,/sbin/restart,/sbin/init

=> Rien n'y change sad

J'ai retenté en y allant "un peu plus fort" :

root    ALL=(ALL:ALL) ALL
kironux    ALL= NOPASSWD: ALL

J'ai ceci :

Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service network-manager restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) and then start(8) utilities,
e.g. stop network-manager ; start network-manager. The restart(8) utility is also available.
stop: Rejected send message, 1 matched rules; type="method_call", sender=":1.4723" (uid=1002 pid=16349 comm="stop network-manager ") interface="com.ubuntu.Upstart0_6.Job" member="Stop" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

=> Impossible de relancer le service (je teste directement depuis le CLI). hmm


EDIT 3:
J'ai adapté /etc/sudoers :

# User privilege specification
root    ALL=(ALL:ALL) ALL
kironux    ALL=NOPASSWD: ALL

(Sources :
http://www.ducea.com/2006/06/18/linux-t … -nopasswd/
http://serverfault.com/questions/328282 … le-as-root )

J'ai ajouté mon compte utilisateur dans sudo.
Commande "groups kironux" retourne ceci :

kironux : kironux sudo

Toujours impossible de redémarrer quelconque service (donc pas network-manager) hmm

Dernière modification par kironux (Le 17/07/2012, à 17:02)

Hors ligne

#19 Le 18/07/2012, à 08:05

Postmortem

Re : [Résolu]Crontab root sans les droits

Salut,
Voilà ce que j'ai fait et qui fonctionne chez moi, aussi bien lancé depuis le terminal que via la crontab de mon user perso (XXXXXX ci-dessous).

Le script $HOME/Scripts/reconnect.bash :

#!/bin/bash

# Redirection messages
LOG=/tmp/reconnect.log
exec >> "$LOG" 2>&1

date
echo "PID avant : $(pgrep NetworkManager)"
echo
sudo /etc/init.d/network-manager restart
echo
echo "PID après : $(pgrep NetworkManager)"
echo "============================"

Les droits du script :

-rwxr-xr-x 1 XXXXXX XXXXXX 259 2012-07-18 07:41 /home/XXXXXX/Scripts/reconnect.bash

La ligne ajoutée dans /etc/sudoers :

XXXXXX    ALL = NOPASSWD: /etc/init.d/network-manager restart

La crontab de mon user (pas celle de root) :

45 7 * * * $HOME/Scripts/reconnect.bash

J'obtiens donc dans /tmp/reconnect.log :

mercredi 18 juillet 2012, 07:45:01 (UTC+0200)
PID avant : 2878

Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service network-manager restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) and then start(8) utilities,
e.g. stop network-manager ; start network-manager. The restart(8) utility is also available.
network-manager stop/waiting
network-manager start/running, process 3092

PID après : 3092
============================

J'ai testé sur mon fixe (Ubuntu 12.04) avec une liaison filaire et sur le portable de madame (Ubuntu 11.04) avec une connexion wifi. Ça fonctionne sur les 2.
Comme tu peux le voir, je n'ai pas eu besoin de faire appel au .bashrc (qui d'ailleurs ne modifiait pas grand chose à mon environnement ; c'est plus les fichiers profile qui initialisent une grande partie de l'environnement j'ai l'impression)

J'espère que ça t'aidera !
Sur ce, au boulot ! Bonne journée


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#20 Le 18/07/2012, à 11:14

kironux

Re : [Résolu]Crontab root sans les droits

Bonjour,

Merci pour ta réponse et le temps consacré à m'aider (et à tous les autres participants, évidemment wink )

(N'ayant plus network-manager (je l'ai remplacé par Wicd), je fait le test avec exim4)
(Je tâcherais de refaire le test avec network-manager ce soir wink )

Alors j'ai fait le test :

Le script $HOME/reconnect.bash :

#!/bin/bash

# Redirection messages
LOG=/tmp/reconnect.log
exec >> "$LOG" 2>&1

date
echo "PID avant : $(pgrep exim4)"
echo
sudo /etc/init.d/exim4 restart
echo
echo "PID après : $(pgrep exim4)"
echo "============================"

Les droits du script :

-rwxrwxr-x  1 kironux kironux  231 juil. 18 09:21 reconnect.sh*

La ligne ajoutée dans /etc/sudoers :

kironux    ALL = NOPASSWD: /etc/init.d/exim4 restart

(J'ai bien vérifié, il n'y a pas d'autres ligne qui peut poser problème, et il n'y a pas de doublons)

La crontab de mon user (pas celle de root) :

* * * * * $HOME/reconnect.sh

(La crontab de root est vide (enfin, tout est commenté))

J'obtiens donc dans /tmp/reconnect.log :

mercredi 18 juillet 2012, 10:50:01 (UTC+0200)
PID avant : 1452

sudo: no tty present and no askpass program specified
And with that remarks folks, the case of the Crown vs yourself was proven.
sudo: no tty present and no askpass program specified
And with that remarks folks, the case of the Crown vs yourself was proven.
sudo: no tty present and no askpass program specified
And with that remarks folks, the case of the Crown vs yourself was proven.
sudo: 3 incorrect password attempts

PID après : 1452
============================

Le compte utilisateur (kironux) est dans les groupe suivants :

kironux adm cdrom sudo dip plugdev lpadmin netdev sambashare vboxusers

uname -a :

Linux Host 3.2.0-26-generic #41-Ubuntu SMP Thu Jun 14 17:49:24 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

/etc/issue :

Ubuntu 12.04 LTS \n \l

Lorsque je lance le script directement (via bash $HOME/reconnect.sh), j'ai ceci dans /tmp/reconnect.log (en tant qu'utilisateur simple) :

mercredi 18 juillet 2012, 10:56:47 (UTC+0200)
PID avant : 9781

 * Stopping MTA for restart
   ...done.
 * Restarting MTA
   ...done.

PID après : 10087
10088
============================

yikes

Je vais rechercher plus d'information avec l'erreur de sudo wink
--------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------

EDIT :
J'ai testé en enlevant le sudo du script :

J'ai ceci dans /tmp/reconnectlog :

mercredi 18 juillet 2012, 11:13:01 (UTC+0200)
PID avant : 10087

 * Stopping MTA for restart
   ...done.
 * Restarting MTA
/sbin/start-stop-daemon: unable to open pidfile /var/run/exim4/exim.pid (Permission denied)

PID après : 10087
============================

hmm

Et lorsque je le lance directement en ligne de commande, j'ai ceci dans /tmp/reconnectlog :

mercredi 18 juillet 2012, 11:16:46 (UTC+0200)
PID avant : 10087

 * Stopping MTA for restart
touch: cannot touch `/var/lib/exim4/config.autogenerated.tmp': Permission denied

PID après : 10087
============================

hmm

Dernière modification par kironux (Le 18/07/2012, à 11:22)

Hors ligne

#21 Le 18/07/2012, à 11:44

Postmortem

Re : [Résolu]Crontab root sans les droits

kironux a écrit :

sudo: no tty present and no askpass program specified

And with that remarks folks, the case of the Crown vs yourself was proven.
sudo: no tty present and no askpass program specified
And with that remarks folks, the case of the Crown vs yourself was proven.
sudo: no tty present and no askpass program specified
And with that remarks folks, the case of the Crown vs yourself was proven.
sudo: 3 incorrect password attempts

Je pige pas trop là, j'ai l'impression que sudo demande le mot de passe !
Question bête mais c'est bien dans la crantab de kironux que tu fais appel à ton script ?
Car la ligne dans le sudoers me semble bonne...
Je sêche !


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#22 Le 18/07/2012, à 12:58

kironux

Re : [Résolu]Crontab root sans les droits

C'est bien ce que j'ai remarqué tongue

J'ai tout de même vérifié /var/log/syslog :

Jul 18 12:57:01 Zeus CRON[23649]: (kironux) CMD ($HOME/reconnect.sh)

Je vais virtualiser une Ubuntu 12.04 et je vais refaire le test wink
(J'ai déjà pas mal bidouillé sur ma machine perso', j'ai du faire une bêtise à un moment donné ^^')

Dernière modification par kironux (Le 18/07/2012, à 13:20)

Hors ligne

#23 Le 18/07/2012, à 16:57

kironux

Re : [Résolu]Crontab root sans les droits

Alors voilà, j'ai virtualisé une Ubuntu, fait les dernières MAJ, et j'ai tenté de la manière suivante :

Le script $HOME/reconnect.bash :

#!/bin/bash

# Redirection messages
LOG=/tmp/reconnect.log
exec >> "$LOG" 2>&1

date
echo "PID avant : $(pgrep NetworkManager)"
echo
sudo /etc/init.d/network-manager restart
echo
echo "PID après : $(pgrep NetworkManager)"
echo "============================"

Les droits du script :

-rwxrwxrwx 1 kironux kironux 259 juil. 18 16:40 reconnect.bash*

(Oui, j'ai carrément mi 777)

La ligne ajoutée dans /etc/sudoers :

kironux ALL = NOPASSWD: /etc/init.d/network-manager restart

La crontab de mon user (pas celle de root) :

* * * * * $HOME/reconnect.bash

(crontab de root toujours vide)

J'obtiens ceci dans /tmp/reconnect.log :

mercredi 18 juillet 2012, 16:47:01 (UTC+0200)
PID avant : 2145

sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: 3 incorrect password attempts

PID après : 2145
============================

(logique vu qu'en cli il me demande le mot de passe hmm)

J'ai vérifié /var/log/syslog :

Jul 18 16:47:01 kironux CRON[2520]: (kironux) CMD ($HOME/reconnect.bash)

J'ai rien fait sur la Ubuntu, mise à part mettre à jour la distribution hmm
(Et même pas la MAJ du noyau)

Je dois sûrement avoir deux mains gauches hmm

EDIT :
En enlevant le sudo, j'ai ceci dans /tmp/reconnectlog :

mercredi 18 juillet 2012, 17:03:01 (UTC+0200)
PID avant : 700

Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service network-manager restart
/etc/init.d/network-manager: 54: /etc/init.d/network-manager: initctl: not found

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) and then start(8) utilities,
e.g. stop network-manager ; start network-manager. The restart(8) utility is also available.
/etc/init.d/network-manager: 102: /etc/init.d/network-manager: start: not found

PID après : 700

(via le crontab)
Et en CLI directement :

mercredi 18 juillet 2012, 17:08:22 (UTC+0200)
PID avant : 700

Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service network-manager restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) and then start(8) utilities,
e.g. stop network-manager ; start network-manager. The restart(8) utility is also available.
stop: Rejected send message, 1 matched rules; type="method_call", sender=":1.68" (uid=1000 pid=2256 comm="stop network-manager ") interface="com.ubuntu.Upstart0_6.Job" member="Stop" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

PID après : 700
============================

hmm

Dernière modification par kironux (Le 18/07/2012, à 17:15)

Hors ligne

#24 Le 20/07/2012, à 07:26

Postmortem

Re : [Résolu]Crontab root sans les droits

Salut,
Il te demande toujours le mot de passe avec sudo... Je pige pas là !

Edit :
Tu peux nous montrer tout le contenu du fichier /etc/sudoers ?

Dernière modification par Postmortem (Le 20/07/2012, à 12:06)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#25 Le 20/07/2012, à 15:45

kironux

Re : [Résolu]Crontab root sans les droits

Re-bonjour smile,

Voilà le contenu du fichier /etc/sudoers :

kironux@host:~$ sudo cat /etc/sudoers
[sudo] password for kironux:
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
kironux ALL = NOPASSWD: /etc/init.d/network-manager restart

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

Hors ligne