“getpwnam() a échoué” dans /bin/sh seulement lorsqu'il est appelé par cron
Voici le contenu de mon fichier crontab:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO="[email protected]"
*/5 * * * * sh /robot/1/master.sh >/dev/null 2>&1
*/5 * * * * sh /robot/2/master.sh >/dev/null 2>&1
*/5 * * * * sh /robot/3/master.sh
*/5 * * * * sh /robot/4/master.sh >/dev/null 2>&1
*/5 * * * * sh /robot/5/master.sh >/dev/null 2>&1
C'est l'erreur continue de s'afficher dans /var/log/cron
lorsqu'il tente d'exécuter:
crond[669]: (sh) ERROR (getpwnam() failed)
Si je lance un de ces fichiers manuellement, ils fonctionnent sans aucun problème.
Quel est le problème avec le fichier crontab?
De côté:
Êtes-vous en essayant de lancer le cron toutes les demi-minutes ou toutes les 5 minutes? L' */5 signifie qu'il sera exécuté à chaque minute avec un pas de 5.
de toute façon,
...c'est-à-dire: Le problème n'est pas réellement avoir à faire avec votre fichier crontab, mais il a à voir avec la façon dont votre système de répertoire, le service qui fournit les informations
moyens il va exécuter toutes les 5 minutes.
sh
n'est pas bash
(même si c'est un lien symbolique vers bash, il fonctionne en mode de compatibilité, en tournant de nombreuses fonctionnalités). Ne pas marquer vos questions bash si vous n'êtes pas réellement via bash.Êtes-vous en essayant de lancer le cron toutes les demi-minutes ou toutes les 5 minutes? L' */5 signifie qu'il sera exécuté à chaque minute avec un pas de 5.
de toute façon,
getpwnam() failed
est assez simple, en général. Quel est votre système de service d'annuaire/store? Si elle est configurée pour parler de quelque chose qui requiert une authentification Kerberos, par exemple, vos tâches cron ne peut pas avoir un billet en cours de validité....c'est-à-dire: Le problème n'est pas réellement avoir à faire avec votre fichier crontab, mais il a à voir avec la façon dont votre système de répertoire, le service qui fournit les informations
getpwnam()
requêtes pour -- est configuré. Qui va creuser autour de votre système config un peu.moyens il va exécuter toutes les 5 minutes.
OriginalL'auteur Andrew | 2017-01-25
Vous devez vous connecter pour publier un commentaire.
Ça m'étonne que personne n'a la réponse correcte à cette question. Aujourd'hui, je pose exactement le même problème et google n'a pas aidé.
Au bout de 2 heures, j'ai constaté que lors de l'importation d'un fichier dans /etc/cron.d le calendrier de la ligne doit contenir une option supplémentaire.....
Je l'ai toujours l'utiliser pour mon crontab -e
De sorte qu'il contient 6 articles.
Lors de la passation de cette dans un fichier dans /etc/cron.d le cron a besoin d'une option supplémentaire, étant à l'utilisateur d'exécuter votre fantaisie/script.
Ceci est documenté dans man crontab(5). Par exemple https://linux.die.net/man/5/crontab . Il dit:
Emplois dans /etc/cron.d/
Les emplois dans cron.d sont des tâches système, qui sont utilisés pour plus d'un utilisateur. C'est la raison pour laquelle c'est le nom de l'utilisateur est nécessaire. MAILTO sur la première ligne est facultative.
sh
, et ce serait certainement causer ungetpwnam()
échec.même pas le sys admins pour mon VPS n'ont aucune idée de ce qui en est la cause lol. btw, pourquoi avez-vous utilisé le chemin d'accès
/etc/cron.d/
et pas/etc/crontab
?J'utilise le répertoire
/etc/cron.d
parce que je peux créer un fichier avec un nom descriptif pour la tâche. Parce que je l'aime de cette façon..../etc/crontab
est un fichier qui n'est jamais modifié par moi.OriginalL'auteur hetOrakel
La sixième place est réservée pour nom d'utilisateur l'exécution de la tâche. Vous avez spécifié un utilisateur appelé
sh
qui n'est probablement pas présent sur la machine.OriginalL'auteur Yuri
réponse simple
sur votre crontab, vous devez spécifier à l'UTILISATEUR d'exécuter la commande
exemple pour exécuter en tant que ROOT est:-
0,10,20,30,40,50 * * * * racine /path_to_script/nom_script
ou à exécuter en tant qu'utilisateur FRED
0,10,20,30,40,50 * * * * fred /path_to_script/nom_script
par défaut sans que l'UTILISATEUR spécifié est à exécuter en tant qu'utilisateur CRON et que l'utilisateur n'aurait pas des autorisations pour exécuter le script
OriginalL'auteur Mark Baiter
Rien de mal avec le fichier crontab (à condition que la par "mon" crontab, tu veux dire que c'est un crontab de l'utilisateur plutôt qu'un crontab système; sinon, voir les autres réponses).
D'autre part, quelque chose de mal avec votre système de service d'annuaire -- comme configuré, sous Linux, avec
nsswitch.conf
. Vous êtes peut-être à l'aide de Kerberos et d'authentification par LDAP magasin, et votre démon cron n'a pas un jeton Kerberos pour s'y connecter (ou bac à sable, comme avec SELinux, de ne pas avoir accès au réseau); c'est peut-être un magasin de fichier qui n'est pas lisible par l'utilisateur dont la crontab est en cours d'exécution; peut-être quelques autres impairs et la chose intéressante est en cours.getpwnam()
est une bibliothèque C d'appel qui effectue une recherche du nom de la actuellement-l'utilisateur connecté. Si votre shell ont été bash, il devrait revenir à un nom deI have no name!
-- donc cette erreur signifie que votresh
mise en œuvre est quelque chose de différent. (Si vous souhaitez exécuter vos scripts bash, utilisezbash
, passh
).OriginalL'auteur Charles Duffy
Nous pouvons créer des tâches cron pour le système ainsi que des particuliers. La crontab dans
/etc/crontab
spécifiquement utilisé pour le système de tâches cron. Si vous avez besoin de spécifier la tâche cron commande exécutée par qui. Dans la question, le nom d'utilisateur n'est pas spécifié. D'où laERROR (getpwnam() failed)
se produit. Vous pouvez créer un utilisateur spécifique cronjobs dans/var/spool/cron/username
NOTE:: Cron jobs sont très utiles, mais désastreux sur les échecs!
OriginalL'auteur Vimal Surendran