170 votes

Comment spécifier dans crontab par ce que l'utilisateur à exécuter le script?

J'ai quelques crontab travaux exécutés en vertu de la racine, mais qui me donne quelques problèmes. Par exemple, tous les dossiers créés dans le processus de la tâche cron sont sous l'utilisateur root et au groupe root. Comment puis-je le faire pour s'exécuter sous l'utilisateur www-data et le groupe www-data donc, quand je lance les scripts de mon site web que je peux manipuler les dossiers et fichiers?

Mon serveur tourne sur Ubuntu.
Actuel crontab travail est:
*/1 * * * * php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

324voto

Mike Points 2803

Au lieu de créer un crontab pour l'exécuter en tant qu'utilisateur root, créer un crontab de l'utilisateur que vous souhaitez exécuter le script. Dans votre cas, crontab -u www-data -e d'éditer la crontab pour la www-data de l'utilisateur. Il suffit de mettre votre commande complet là-bas et le retirer de l'utilisateur root crontab.

47voto

Christian Nowak Points 414

juste avant le nom du programme:

*/1 * * * * www-data php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/file d'attente.log 2>&1

14voto

pymkin Points 571

Puisque vous êtes sous Ubuntu, le crontab de votre système est situé en /etc/crontab.

En tant qu'utilisateur root (ou sudo), vous pouvez simplement éditer ce fichier et spécifiez l'utilisateur qui doit s'exécuter cette commande. Voici le format des entrées dans la crontab système et comment vous devez entrer votre commande:

# m h dom mon dow user  command
*/1 * * * * www-data php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

Bien sûr, les autorisations de votre script php et votre fichier journal doit être réglé de sorte que l' www-data utilisateur a accès à eux.

9voto

Russell E Glaue Points 161

Vous pouvez également essayer d'utiliser runuser (en tant que root) pour exécuter une commande en tant qu'utilisateur différent

*/1 * * * * runuser php5 \
            --command="/var/www/web/includes/crontab/queue_process.php \
                       >> /var/www/web/includes/crontab/queue.log 2>&1"

Voir aussi: man runuser

8voto

Oliver Moran Points 1924

La suggestion de Mike sonne comme le "droit chemin". Je suis tombé sur ce thread vouloir spécifier à l'utilisateur d'exécuter vncserver sous sur reboot et je voulais garder tous mes tâches cron en un seul endroit.

J'ai été d'obtenir l'erreur suivante pour le VNC cron:

vncserver: The USER environment variable is not set. E.g.:

Dans mon cas, j'ai été en mesure d'utiliser sudo de spécifier qui pour exécuter la tâche.

@reboot sudo -u [someone] vncserver ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X