Comment exécuter un travail cron en tant qu'utilisateur spécifique?

66

Je souhaite exécuter un travail cron en tant qu'utilisateur spécifique sur ma machine. Comment puis-je spécifier l'utilisateur dans lequel un travail cron doit être exécuté?.

Les tâches cron seront exécutées sur un serveur (fonctionnant sous Ubuntu 10.0.4). Les «utilisateurs» sont des utilisateurs créés spécifiquement pour effectuer des tâches spécifiques côté serveur. Ces "utilisateurs" ont en commun:

  • Impossible de se connecter au système
  • Avoir un accès restreint à des dossiers / fichiers spécifiques
morphe
la source

Réponses:

79

En supposant que vous ne pouvez pas simplement vous connecter et l'ajouter à la crontab de cet utilisateur, mettez un fichier dans /etc/cron.d. Il devrait être formaté comme un travail normal, mais avec un champ supplémentaire. Avant la commande à exécuter et après le minutage, mettez l'utilisateur. Vous devriez pouvoir trouver des exemples déjà sur votre système.

Exemple:

#<timing>   <user> <command>
11 * * * *  root   /usr/lib/command
Daenyth
la source
Je pense que c'est la bonne réponse. Je vais devoir chercher quelques exemples et en approfondir d'autres.
Morpheous
2
De plus, c’est la meilleure façon de faire ce que vous voulez. Plus précisément, regardez dans le fichier / etc / crontab et vous verrez qu’après le modèle de temps et avant la commande, il y a écrit "root". Cela signifie que "root" exécute ces commandes. Ajoutez simplement votre propre planning et utilisez plutôt n'importe quel utilisateur au lieu de "root". Notez également que si vous utilisez des crontabs par utilisateur (comme le suggère Eric D), vous risquez de perdre la fonctionnalité du système crontab (/ etc / crontab et /etc/cron.d).
Patkos Csaba
3
La solution de préférence, je suppose, serait de tout crontab -u <user> -egarder au même endroit, ce que vous pouvez faire en tant que root. J'aime grouper mes tâches cron par fonction, cependant, plutôt que par utilisateur, c'est donc la solution préférable pour moi.
Stuart H
41

En tant que root, pour éditer le cron de user1:

crontab -u user1 -e

Vous pouvez également démarrer votre commande avec:

su user1 -c foo bar

Mais souvent, les scripts eux-mêmes réduisent leur propre accès lorsqu'ils sont démarrés en tant que root.

Eric Darchis
la source
1

Je cherche cela depuis quelques semaines et cela a finalement fonctionné ...

Créez votre script en tant qu'utilisateur1

ssh user1@ipaddress
nano hourly-event.sh

entrer une commande

#!/bin/bash
echo "YAY it works" > /home/user1/yay.txt

le rendre exécutable

chmod 755 hourly-event.sh

éditer la crontab pour user1

sudo crontab -u user1 -e

mettre une ligne en bas pointant vers votre (vos) script (s)

# m h  dom mon dow   command
*   *   *   *   *    bash ./hourly-event.sh

exit - sauvegarde des modifications (il affichera un répertoire / tmp lors de la sauvegarde ... tout va bien)

attendez le tour de la minute

ouvrez votre nouveau yay.txt

nano /home/user1/yay.txt

vous devriez maintenant avoir une nano-fenêtre ouverte avec "YAY ça marche" comme première et unique ligne si le bas de votre nano-fenêtre indique New File ... eh bien ... je ne sais pas

vous pouvez également vérifier votre entrée récemment crontab pour user1 à l’adresse: / var / spool / cron / crontabs / user1

PAIX

utilisateur220364
la source
0

Parfois, vous voudrez peut-être que l'utilisateur charge son environnement, surtout s'il utilise "rbenv", "nvm", comme ceci:

0 0 * * * source ~/.bash_profile && cd /opt/app/current && bundle exec ruby ...

(ici la commande source ~/.bash_profilechargera votre environnement Ruby ou Node.

Siwei Shen
la source