Je dois exécuter un script quotidiennement. Le script doit être exécuté par un utilisateur spécifique (ex. user1) et non par root. J'ai donc placé le fichier cron dans /etc/cron.d et mis le nom de l'utilisateur dans la ligne (2ème colonne). Mais le système affiche une erreur indiquant que la commande n'a pas été trouvée. Je soupçonne que le script n'a pas été exécuté dans l'environnement de user1. Ai-je oublié quelque chose ?
Réponses
Trop de publicités?Seulement /etc/crontab
et les fichiers dans /etc/cron.d/
ont un champ "nom d'utilisateur". Dans ce fichier, vous pouvez faire ceci :
1 1 * * * username /path/to/your/script.sh
Dans la crontab de root sudo crontab -e
que vous pouvez utiliser :
1 1 * * * su username -c "/path/to/your/script.sh"
Ou vous pouvez utiliser la crontab de l'utilisateur comme ceci :
sudo crontab -u username -e
En deuxième colonne dans un fichier crontab correspond à l'heure à laquelle vous souhaitez que la tâche s'exécute. Vous voulez dire le sixième champ ?
Vous devrez peut-être définir le PATH de cet utilisateur si l'exécutable que vous utilisez se trouve, par exemple, dans /usr/local/bin. Pour définir le PATH, placez quelque chose comme ceci avant les cronjobs :
PATH=/bin:/usr/bin:/usr/local/bin
*/5 * * * * user1 sample_executable
L'autre façon est de spécifier complètement le chemin vers sample_executable dans votre cronjob, ainsi :
*/5 * * * * user1 /path/to/sample_executable
Si sample_executable fait référence à des exécutables qui ne se trouvent pas dans le PATH standard, vous devez utiliser la première option.
Le répertoire typique pour les crontabs des utilisateurs est /var/spool/cron/crontabs. Le format de fichier est celui qui n'inclut pas le nom d'utilisateur. Les crontabs utilisateur sont la propriété de l'utilisateur et portent le nom de l'utilisateur avec le mode 0600. La meilleure façon de gérer cela est d'écrire votre fichier tab et d'utiliser crontab -u username filename
pour configurer les entrées cron que vous souhaitez pour cet utilisateur.