80 votes

Comment exécuter une tâche cron en tant qu'utilisateur spécifique ?

Je voudrais exécuter une tâche cron en tant qu'utilisateur spécifique sur ma machine. Comment puis-je spécifier l'utilisateur pour qu'une tâche cron s'exécute en tant que tel ?.

Les tâches cron s'exécuteront sur un serveur (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 :

  • Ne peuvent pas se connecter au système
  • Ont un accès restreint à des dossiers/fichiers spécifiques

92voto

Daenyth Points 6152

En supposant que vous ne puissiez pas simplement vous connecter et l'ajouter au crontab de cet utilisateur, placez un fichier dans /etc/cron.d. Il doit être formaté comme une tâche cron normale, mais avec un champ supplémentaire. Avant la commande à exécuter et après le timing, indiquez l'utilisateur. Vous devriez pouvoir trouver des exemples déjà sur votre système.

Exemple :

#    
11 * * * *  root   /usr/lib/command

46voto

SamSPICA Points 919

En tant que root, pour éditer le cron de l'utilisateur1 :

crontab -u user1 -e

Vous pouvez également démarrer votre commande avec :

su user1 -c foo bar

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

2voto

user220364 Points 49

J'ai cherché cela pendant quelques semaines et ça a finalement fonctionné...

Créez votre script en tant qu'utilisateur1

ssh user1@adresseip
nano hourly-event.sh

entrer une commande

#!/bin/bash
echo "YOUPI ça marche" > /home/user1/youpi.txt

rendez-le exécutable

chmod 755 hourly-event.sh

éditez le crontab pour l'utilisateur1

sudo crontab -u user1 -e

ajoutez une ligne en bas pointant vers votre/vos scripts

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

sortir - en sauvegardant les modifications (il affichera un répertoire /tmp lors de l'enregistrement... c'est normal)

attendez pour le changement de minute

ouvrez votre nouveau youpi.txt

nano /home/user1/youpi.txt

vous devriez maintenant avoir une fenêtre nano ouverte avec "YOUPI ça marche" comme première et seule ligne si le bas de votre fenêtre nano indique Nouveau fichier... eh bien.. je ne sais pas

vous pouvez également vérifier votre nouvelle entrée dans le crontab pour l'utilisateur1 à : /var/spool/cron/crontabs/user1

PAIX

1voto

Siwei Points 667

Parfois, vous voudrez peut-être que l'utilisateur charge son environnement, surtout lors de l'utilisation de rbenv, nvm, comme ceci :

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

_(ici, la commande source ~/.bash_profile chargera votre environnement Ruby ou Node.)_

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X