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
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.
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
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.
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 ...
, 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