Comment spécifier dans crontab par quel utilisateur exécuter le script?

J'ai peu de tâches crontab qui s'exécutent sous root, mais cela me pose quelques problèmes. Par exemple, tous les dossiers créés dans le processus de ce travail cron sont sous user root et group root. Comment puis-je faire fonctionner sous www-data utilisateur et groupe www-data donc quand j'exécute des scripts à partir de mon site web, Je peux manipuler ces dossiers et fichiers?

Mon serveur fonctionne sur Ubuntu.
Le travail crontab actuel est:

*/1 * * * * php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1
136
demandé sur the Tin Man 2011-12-12 18:18:13

5 réponses

Au lieu de créer une crontab à exécuter en tant qu'utilisateur root, créez une crontab pour l'utilisateur que vous souhaitez exécuter le script. Dans votre cas, crontab -u www-data -e modifiera la crontab pour l'utilisateur www-data. Il suffit de mettre votre commande complète et de la supprimer de la crontab de l'utilisateur root.

271
répondu Mike 2011-12-12 15:53:18

EDIT: notez que cette méthode ne fonctionnera pas avec crontab-e, mais ne fonctionne que si vous éditez /etc/crontab directement. Sinon, vous pouvez obtenir une erreur, comme /bin/sh: www-data: command not found

Juste avant le nom du programme:

*/1 * * * * www-data php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1
40
répondu Christian Nowak 2016-02-08 22:55:23

Puisque vous utilisez Ubuntu, votre crontab système est situé à /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 pour votre script php et votre fichier journal doivent être définies de manière à ce que l'utilisateur www-data y ait accès.

12
répondu pymkin 2013-08-05 08:18:35

La suggestion de Mike ressemble à la "bonne façon". Je suis tombé sur ce thread voulant spécifier l'utilisateur à exécuter vncserver au redémarrage et je voulais garder tous mes travaux cron au même endroit.

Je recevais l'erreur suivante pour le cron VNC:

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

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

@reboot sudo -u [someone] vncserver ...
7
répondu Oliver Moran 2013-05-12 12:49:04

, 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

7
répondu Russell E Glaue 2013-09-20 16:13:13