"getpwnam() fehlgeschlagen" /bin/sh nur bei Aufruf aus cron
Hier der Inhalt meiner crontab-Datei:
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
Dies ist der Fehler, der zeigt in /var/log/cron
wenn er versucht zu laufen:
crond[669]: (sh) ERROR (getpwnam() failed)
Wenn ich diese Dateien manuell funktionieren Sie ohne Probleme.
Was falsch mit der crontab-Datei?
- Beiseite:
sh
ist nichtbash
(auch wenn es ein symbolischer Link auf die bash, es arbeitet im Kompatibilität-Modus, drehen der zahlreichen Merkmale). Nicht tag Ihre Fragen bash, wenn Sie eigentlich nicht auf die bash benutzen. - Sind Sie versuchen, führen Sie den cron jede halbe minute oder alle 5 Minuten? Das */5 bedeutet, dass es jede minute ausgeführt mit Schritt 5.
- jedenfalls
getpwnam() failed
ist ziemlich einfach, im Allgemeinen. Was ist Ihr system Verzeichnis service/store? Wenn es konfiguriert ist, etwas zu reden, dass die Kerberos-Authentifizierung erfordert, zum Beispiel, dann ist dein cron-jobs können nicht über einen gültigen Fahrausweis verfügen. - ...ist zu sagen: Das problem tatsächlich nicht auf mit Ihrer crontab-Datei, aber es hat zu tun mit, wie Sie Ihr system Verzeichnis service-das bietet die Informationen, die
getpwnam()
Abfragen für -- konfiguriert ist. Das wird bedeuten, Graben um in Ihrer system-config ein bisschen. - bedeutet, es laufen werde alle 5 Minuten.
- Suchen in es jetzt, danke!
- Übrigens, ich kann nicht sprechen für was auch immer
/bin/sh
Sie geschehen zu sein mit, aber bash wird erholen würdevoll von einemgetpwnam
Fehler (err, gewissermaßen anmutig; es wird vorausgesetzt, dass ein Benutzer namensI have no name!
, hat ein home-Verzeichnis von/
, und hat eine Standard-shell/bin/sh
). Sie könnten versuchen, EinstellungSHELL=bash
in deiner crontab, und mitbash
stattsh
ausdrücklich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wundert es mich, dass niemand die richtige Antwort auf diese Frage. Heute Stand ich vor genau dem gleichen problem, und google hat auch nicht geholfen.
Nach 2 Stunden fand ich, dass, wenn er eine Datei in /etc/cron.d die Einteilung hat zu enthalten eine extra option.....
Ich immer benutze diese für meine crontab -e
Enthält also 6 Elemente.
Wenn man diese in eine Datei in /etc/cron.d der cron muss eine zusätzliche option an, wird der Benutzer zur Ausführung Ihrer Phantasie/script.
Dies ist dokumentiert in man crontab(5). Zum Beispiel https://linux.die.net/man/5/crontab . Es sagt:
Jobs in /etc/cron.d/
Die jobs in cron.d sind die system-Arbeitsplätze, die in der Regel für mehr als einen Benutzer. Das ist der Grund, warum der name des Benutzers erforderlich. MAILTO auf die erste Zeile ist optional.
sh
werden, und das würde sicherlich dazu führen, eingetpwnam()
scheitern./etc/cron.d/
und nicht/etc/crontab
?/etc/cron.d
da kann ich erstellen Sie eine Datei mit einem aussagekräftigen Namen pro Aufgabe. Weil ich mag es, dass Weg..../etc/crontab
ist eine Datei, die nicht verändert von mir.einfache Antwort
auf Ihrem crontab müssen Sie die BENUTZER der Befehl ausgeführt werden
Beispiel als "ROOT" ausgeführt wird:-
0,10,20,30,40,50 * * * * root /path_to_script/script_name
oder als Benutzer ausführen FRED
0,10,20,30,40,50 * * * * fred /path_to_script/script_name
standardmäßig kein BENUTZER angegeben ist die Ausführung als Benutzer von CRON und, dass Benutzer nicht über die Berechtigungen zum ausführen des Skriptes
Den sechsten Platz ist reserviert für Benutzername den Auftrag auszuführen. Sie spezifiziert ein Benutzer namens
sh
die meisten wohl nicht auf dem Rechner.Ist nichts falsch mit der crontab-Datei (so lange wie die von "meinem" crontab, du meinst, dass es eine user-crontab als eine system-crontab; andernfalls siehe andere Antwort).
Auf der anderen Seite, ist etwas falsch mit Ihrem system, der directory service-Konfiguration in Linux, mit
nsswitch.conf
. Vielleicht verwenden Sie eine mit Kerberos-Authentifizierung LDAP-store, und Ihre cron-daemon nicht über ein Kerberos-token, um eine Verbindung herzustellen (oder in der Sandbox, wie bei SELinux, nicht auf das Netzwerk zugreifen); vielleicht ist es eine Datei zu speichern, die nicht lesbar für den Benutzer, dessen crontab ausgeführt wird; vielleicht einige andere seltsame und interessante Sache Los ist.getpwnam()
ist eine C-Bibliothek aufrufen, die führt eine Suche nach dem Namen des derzeit angemeldeten Benutzers. Wenn Ihre Schale wurden bash, es würde zurückgreifen, um einen NamenI have no name!
-- also dieser Fehler bedeutet, dass Ihrsh
Umsetzung ist etwas anders. (Wenn Sie möchten, führen Sie Ihre Skripte mit bash, verwenden Siebash
, nichtsh
).Können wir erstellen von cron-jobs für system als auch für Einzelpersonen. Die crontab in
/etc/crontab
speziell für system-cronjobs. So müssen Sie den cronjob Befehl ausgeführt, von wem. In der Frage der Benutzername nicht angegeben. Daher derERROR (getpwnam() failed)
Auftritt. Sie können erstellen Sie benutzerspezifische cronjobs in/var/spool/cron/username
HINWEIS: die Cron-jobs sind sehr nützlich, aber katastrophal auf Fehler!