"stdin: is not a tty" von cronjob
Ich bin immer die folgende E-mail jedes mal, wenn ich die Ausführung eines bestimmten cronjob. Das genannte script läuft wunderbar, wenn ich ' m nannte es unmittelbar und auch aus der cron. Also die Meldung bekomme ich nicht einen tatsächlichen Fehler, da das script genau das tut, was es tun soll.
Hier ist der cron.d-Eintrag:
* * * * * root /bin/bash -l -c "/opt/get.sh > /tmp/file"
und die get.sh Skript selbst:
#!/bin/sh
#group and url
groups="foo"
url="https://somehost.test/get.php?groups=${groups}"
# encryption
pass='bar'
method='aes-256-xts'
pass=$(echo -n $pass | xxd -ps | sed 's/[[:xdigit:]]\{2\}/&/g')
encrypted=$(wget -qO- ${url})
decoded=$(echo -n $encrypted | awk -F '#' '{print $1}')
iv=$(echo $encrypted | awk -F '#' '{print $2}' |base64 --decode | xxd -ps | sed 's/[[:xdigit:]]\{2\}/&/g')
# base64 decode input and save to file
output=$(echo -n $decoded | base64 --decode | openssl enc -${method} -d -nosalt -nopad -K ${pass} -iv ${iv})
if [ ! -z "${output}" ]; then
echo "${output}"
else
echo "Error while getting information"
fi
Wenn ich nicht die bash -l
syntax der script hängt während der wget-Prozess. Also meine Vermutung wäre, dass es hat etwas zu tun mit wget und setzen die Ausgabe auf stdout. Aber ich habe keine Ahnung wie es zu lösen ist.
Verwenden Sie einen proxy?
Ja ich verwende einen proxy eingestellt werden, über die http_proxy-variable.
Oh, warten Sie, ich denke, wir sind immer hier irgendwo. Ich den proxy über eine Datei in /etc/profile.d Die wird durch /etc/profile. Vielleicht ist diese einfach nicht zur Verfügung steht, die während einer "normalen" cronjob aufrufen?
Stellen Sie sicher, dass die variable gesetzt ist, wenn Ihr bash (root) ist kein login-shell.
Ja ich verwende einen proxy eingestellt werden, über die http_proxy-variable.
Oh, warten Sie, ich denke, wir sind immer hier irgendwo. Ich den proxy über eine Datei in /etc/profile.d Die wird durch /etc/profile. Vielleicht ist diese einfach nicht zur Verfügung steht, die während einer "normalen" cronjob aufrufen?
Stellen Sie sicher, dass die variable gesetzt ist, wenn Ihr bash (root) ist kein login-shell.
InformationsquelleAutor Kai | 2014-10-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie habe eigentlich zwei Fragen hier.
stdin: is not a tty
?Diese Warnmeldung wird gedruckt, indem
bash -l
. Die-l
(--login
) Optionen fragtbash
zum start der login-shell, z.B. die eine, die in der Regel gestartet, wenn Sie Ihr Passwort eingeben. In diesem Fallbash
erwartetstdin
zu einem echten terminal (z.B. dieisatty(0)
- Gespräch 1 zurück), und es ist nicht wahr, wenn es voncron
—daher diese Warnung.Weitere einfache Möglichkeit zum reproduzieren diese Warnung, und die sehr Häufig ist, ist Sie zum ausführen dieses Befehls über
ssh
:Es geschieht, weil
ssh
reserviert nicht ein terminal, wenn man es mit einem Befehl als parameter (sollte man-t
option fürssh
zu zwingen, die Klemmenbelegung in diesem Fall).-l
?Als richtig erklärt von @Cyrus in die Kommentare, die Liste der Dateien, die
bash
Lasten auf start hängt von der Art der Sitzung. E. g. für login-shells geladen werden, die/etc/profile
,~/.bash_profile
,~/.bash_login
, und~/.profile
(siehe AUFRUF in manuellebash(1)
), während für nicht-login-shells wird es nur geladen~/.bashrc
. Es scheint, Sie definiert Ihrehttp_proxy
variable nur in einer der Dateien, die geladen für login-shells, aber nicht in~/.bashrc
. Sie zog es zu~/.wgetrc
und es ist richtig, man kann aber auch definieren, in~/.bashrc
und es würde gearbeitet haben.InformationsquelleAutor afenster
in Ihr .Profil ändern
zu
InformationsquelleAutor user1130176
Landete ich setzen die proxy-Konfiguration in der wgetrc. Es gibt jetzt keine Notwendigkeit, führen Sie das Skript auf der login-shell nicht mehr.
Dies ist nicht eine Reale Antwort auf das eigentliche problem, aber es löste mir.
Wenn Sie auf dieses problem stoßen, überprüfen Sie, ob Sie auch wirklich alle Umgebungsvariablen gesetzt, als Sie erwarten. Vielen Dank an Cyrus für die Umsetzung der mich in die richtige Richtung.
InformationsquelleAutor Kai