[BASH/CRON] Différences: droits des fichiers
fabriceOb
Messages postés
23
Statut
Membre
-
fabriceOb Messages postés 23 Statut Membre -
fabriceOb Messages postés 23 Statut Membre -
Bonjour
J'ai un script plutot long pour faire des tests.
Déroulement du script:
1- Initialisations diverses ($fold: dossier de travail depuis le home: /home/fabrice/test )
2- Création de $menu (fichier html)
3- lancement de selenium par la ligne:
/usr/bin/java -jar "$fold/selenium-server.jar" -htmlSuite "*firefox" $2 "$menu" "$file"
4- Traitement de $file (qui est le fichier résultat de selenium)
Quand je lance le script à la main, ca fonctionne.
Quand je le lance via mon crontab -e:
00 * * * * /home/fabrice/test/./unix params3
Ca ne marche pas.
Le souci se situer à la fin de l'étape 3: le fichier $file est bien crée, mais pèse 0 Ko. Comme s'il était protégé en écriture.
(ce que je teste à l'étape 4...)
Comment un script peut-il crée un fichier sans avoir les droits pour y écrire ?
quelqu'un a des idées ?
Merci !
J'ai un script plutot long pour faire des tests.
Déroulement du script:
1- Initialisations diverses ($fold: dossier de travail depuis le home: /home/fabrice/test )
2- Création de $menu (fichier html)
3- lancement de selenium par la ligne:
/usr/bin/java -jar "$fold/selenium-server.jar" -htmlSuite "*firefox" $2 "$menu" "$file"
4- Traitement de $file (qui est le fichier résultat de selenium)
Quand je lance le script à la main, ca fonctionne.
Quand je le lance via mon crontab -e:
00 * * * * /home/fabrice/test/./unix params3
Ca ne marche pas.
Le souci se situer à la fin de l'étape 3: le fichier $file est bien crée, mais pèse 0 Ko. Comme s'il était protégé en écriture.
(ce que je teste à l'étape 4...)
Comment un script peut-il crée un fichier sans avoir les droits pour y écrire ?
quelqu'un a des idées ?
Merci !
A voir également:
- [BASH/CRON] Différences: droits des fichiers
- Bingo bash free - Télécharger - Divers Jeux
- Z-cron - Télécharger - Optimisation
- Bash pause ✓ - Forum Shell
- Bash addition - Forum Programmation
- Bash permission non accordée - Forum Shell
10 réponses
Je pense qu'il a les droits pour écrire le fichier (puisque le fichier existe) mais il n'a peut être pas les droits pour exécuter l'application Java...
Peut être qu'avec un sudo/su ...
Peut être qu'avec un sudo/su ...
Il exécute pourtant bien la ligne java (vu que le fichier est crée...)
Comment on peut faire un sudo dans un script sans qu'il demande le mot de passe ?
[edit] En meme temps, quand je tape le mot de passe, ca ne marche pas.. je pense que ca vient donc de là: le su n'a pas les droits sur l'éxécution... (a priori, il lui manque quelque chose pour firefox bin.... (je hais ubuntu 64..))
Comment on peut faire un sudo dans un script sans qu'il demande le mot de passe ?
[edit] En meme temps, quand je tape le mot de passe, ca ne marche pas.. je pense que ca vient donc de là: le su n'a pas les droits sur l'éxécution... (a priori, il lui manque quelque chose pour firefox bin.... (je hais ubuntu 64..))
Bonjour,
Essaye de rediriger stdout et stderr de ton script cron vers un fichier de logs pour analyse:
En cron, l'environnement de ton utilisateur n'est pas le même que quand tu es logué, certaines variables peuvent être manquantes, $JAVA_HOME, $CLASSPATH, et tout le reste. c'est peut-être ce qui te pose problème.
Dans ce cas, les solutions sont multiples:
définir des variable pour l'environnement cron (en tête de crontab voir le man)
définir tout ce qu'il faut dans le script lancé (pas maintenable si a terme tu as beaucoup de scripts lancé de cette manière)
faire dans le script ce qui est fait quand tu te logues (source des fichier .bash* /etc/profile.d/* etc.)
@+
Essaye de rediriger stdout et stderr de ton script cron vers un fichier de logs pour analyse:
00 * * * * /home/fabrice/test/./unix params3devient
00 * * * * /home/fabrice/test/./unix params3 >/home/fabrice/test/unix.out 2>&1Aprés exécution regarde si tu n'as pas des erreurs dans /home/fabrice/test/unix.out
En cron, l'environnement de ton utilisateur n'est pas le même que quand tu es logué, certaines variables peuvent être manquantes, $JAVA_HOME, $CLASSPATH, et tout le reste. c'est peut-être ce qui te pose problème.
Dans ce cas, les solutions sont multiples:
définir des variable pour l'environnement cron (en tête de crontab voir le man)
définir tout ce qu'il faut dans le script lancé (pas maintenable si a terme tu as beaucoup de scripts lancé de cette manière)
faire dans le script ce qui est fait quand tu te logues (source des fichier .bash* /etc/profile.d/* etc.)
@+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jipicy> pendant une seconde, j'ai cru que tu te moquais de moi, mais finalement, j'ai appris des trucs sur cette page.
finalement, le cron ouvre des sessions pour moi, et ca ne lui suffit pas.
Exemple dans le log:
Aug 20 11:22:01 fabrice-desktop CRON[9328]: (pam_unix) session opened for user fabrice by (uid=0)
Aug 20 11:22:01 fabrice-desktop CRON[9328]: (pam_unix) session closed for user fabrice
Donc, j'ai bien "géré" et c'est bien mon cron qui lance mon fichier... Pourquoi n'a t-il pas les droits ? Mystère.
(Quoique je doive explorer la piste du firefox/bin (qui n'existe pas sur ma version 64...). Quelqu'un m'avait bidouillé une solution, mais ca peut venir de là vu les messages d'erreurs en rajoutant le sudo...)
finalement, le cron ouvre des sessions pour moi, et ca ne lui suffit pas.
Exemple dans le log:
Aug 20 11:22:01 fabrice-desktop CRON[9328]: (pam_unix) session opened for user fabrice by (uid=0)
Aug 20 11:22:01 fabrice-desktop CRON[9328]: (pam_unix) session closed for user fabrice
Donc, j'ai bien "géré" et c'est bien mon cron qui lance mon fichier... Pourquoi n'a t-il pas les droits ? Mystère.
(Quoique je doive explorer la piste du firefox/bin (qui n'existe pas sur ma version 64...). Quelqu'un m'avait bidouillé une solution, mais ca peut venir de là vu les messages d'erreurs en rajoutant le sudo...)
jipicy > ca m'apprendra à taper plus vite: je te parlais de la page sur le sudo ^^
Pour les conseils donnés dans l'autre fil: j'ai effectivement cru que ca marchait, mais finalement, non. Mon test a tourné "à vide" pendant 2 semaines (alors que j'étais persuadé qu'il marchait...)
[et vu que je l'avais mis résolu, je me voyais mal le réouvrir]
Pour le out, voilà le résultat:
java.lang.RuntimeException: Firefox couldn't be found in the path!
Please add the directory containing 'firefox-bin' to your PATH environment
variable, or explicitly specify a path to Firefox like this:
*firefox /blah/blah/firefox-bin
=> donc, c'est bien firefox/bin qui me fait encore suer.
Faut juste que je trouve comment avoir un firefox/bin qui fonctionne pour mon cron alors que firefox/bin sur Ubuntu64, c'est pas génial.
J'avance, meme si c'est pas dans le sens que je croyais...
Pour les conseils donnés dans l'autre fil: j'ai effectivement cru que ca marchait, mais finalement, non. Mon test a tourné "à vide" pendant 2 semaines (alors que j'étais persuadé qu'il marchait...)
[et vu que je l'avais mis résolu, je me voyais mal le réouvrir]
Pour le out, voilà le résultat:
java.lang.RuntimeException: Firefox couldn't be found in the path!
Please add the directory containing 'firefox-bin' to your PATH environment
variable, or explicitly specify a path to Firefox like this:
*firefox /blah/blah/firefox-bin
=> donc, c'est bien firefox/bin qui me fait encore suer.
Faut juste que je trouve comment avoir un firefox/bin qui fonctionne pour mon cron alors que firefox/bin sur Ubuntu64, c'est pas génial.
J'avance, meme si c'est pas dans le sens que je croyais...
Pour le out, voilà le résultat:
java.lang.RuntimeException: Firefox couldn't be found in the path!
Please add the directory containing 'firefox-bin' to your PATH environment
variable, or explicitly specify a path to Firefox like this:
*firefox /blah/blah/firefox-bin
Voualà ce que je voulais dire plus haut :)
La variable PATH n'existe pas via cron, il faut donner le chemin complet vers firefox dans ton script, et ça devrait fonctionner :)
@+
java.lang.RuntimeException: Firefox couldn't be found in the path!
Please add the directory containing 'firefox-bin' to your PATH environment
variable, or explicitly specify a path to Firefox like this:
*firefox /blah/blah/firefox-bin
Voualà ce que je voulais dire plus haut :)
La variable PATH n'existe pas via cron, il faut donner le chemin complet vers firefox dans ton script, et ça devrait fonctionner :)
@+
Seulement, quand je note:
/usr/bin/java -jar "$fold/selenium-server.jar" -htmlSuite "*custom /usr/bin/firefox" $2 "$menu" "$file
=> selenium lance bien firefox (hourra)
=> il n'ouvre pas une nouvelle session de FF (contrairement à d'habitude)
=> il ne lance pas les tests.
bon, ca vient donc de la facon de lancer firefox par selenium, faut que je regarde ca ;)
Merci à vous.
/usr/bin/java -jar "$fold/selenium-server.jar" -htmlSuite "*custom /usr/bin/firefox" $2 "$menu" "$file
=> selenium lance bien firefox (hourra)
=> il n'ouvre pas une nouvelle session de FF (contrairement à d'habitude)
=> il ne lance pas les tests.
bon, ca vient donc de la facon de lancer firefox par selenium, faut que je regarde ca ;)
Merci à vous.
$ /usr/lib/firefox/firefox-bin
/usr/lib/firefox/firefox-bin: error while loading shared libraries: libmozjs.so: cannot open shared object file: No such file or directory
dommage.
il me reste je pense 3 solutions:
-> ne pas utiliser firefox (vu que firefox-bin n'existe pas en 64 sous Ubuntu).
-> contourner le probleme pour avoir un firefox-bin compatible
-> changer d'OS.
/usr/lib/firefox/firefox-bin: error while loading shared libraries: libmozjs.so: cannot open shared object file: No such file or directory
dommage.
il me reste je pense 3 solutions:
-> ne pas utiliser firefox (vu que firefox-bin n'existe pas en 64 sous Ubuntu).
-> contourner le probleme pour avoir un firefox-bin compatible
-> changer d'OS.
En fait, le firefox-bin c'était une idée comme ça, mais effectivement, ça ne fonctionnera pas.
Autre chose,
Quand tu lance le script à la main, j'imagine que c'est à partir d'une console ouverte dans une interface graphique (gnome/kde), de mémoire, pour sélénium, comme il utilise Firefox, il est nécéssaire d'avoir une interface graphique lancée et accessible, ce que n'a pas cron.
Le plus simple pour tester:
sur la machine, lancer l'interface graphique, ouvrir une console dans cette interface et taper la commande suiavnte:
Cordialement
Autre chose,
Quand tu lance le script à la main, j'imagine que c'est à partir d'une console ouverte dans une interface graphique (gnome/kde), de mémoire, pour sélénium, comme il utilise Firefox, il est nécéssaire d'avoir une interface graphique lancée et accessible, ce que n'a pas cron.
Le plus simple pour tester:
sur la machine, lancer l'interface graphique, ouvrir une console dans cette interface et taper la commande suiavnte:
xhost +Ensuite, dans ton script, il faudrait commencer par exporter la variable DISPLAY:
export DISPLAY=:0Et attendre que le cron se déclanche, voir si ça fonctionne.
Cordialement
$ xhost +
access control disabled, clients can connect from any host
le cron se lance : arf.. dommage ;)
mais meme si le cron bloque toujours... mais je suis presque sur que c'est firefox-bin qui bloque.... je chercherais demain.
access control disabled, clients can connect from any host
le cron se lance : arf.. dommage ;)
mais meme si le cron bloque toujours... mais je suis presque sur que c'est firefox-bin qui bloque.... je chercherais demain.