“stdin: n'est pas un tty” de tâche cron
Je reçois le mail suivant à chaque fois que j'execute un spécifique de la tâche cron. Le script appelé fonctionne très bien lorsque je suis en l'appelant directement et même à partir de cron. Si j'obtiens le message n'est pas une erreur, car le script est exactement ce qu'il est censé faire.
Ici, c'est le cron.d entrée:
* * * * * root /bin/bash -l -c "/opt/get.sh > /tmp/file"
et la get.sh le script lui-même:
#!/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
Quand je ne suis pas à l'aide de la bash -l
syntaxe du script se bloque lors de l'wget processus. Donc j'imagine que ça a quelque chose à voir avec wget et de mettre la sortie vers stdout. Mais je n'ai aucune idée de comment le résoudre.
Utilisez-vous un proxy?
Oui j'utilise un proxy est défini par la variable http_proxy.
Oh, attendez, je pense que nous sommes se rendre quelque part ici. Je définir le proxy par le biais d'un fichier dans /etc/profile.d Qui est inclus dans le fichier /etc/profile. Peut-être que ce n'est tout simplement pas disponible lors d'une "normale" tâche cron appel?
Assurez-vous que la variable est défini lors de votre bash (utilisateur root) n'est shell de connexion.
Oui j'utilise un proxy est défini par la variable http_proxy.
Oh, attendez, je pense que nous sommes se rendre quelque part ici. Je définir le proxy par le biais d'un fichier dans /etc/profile.d Qui est inclus dans le fichier /etc/profile. Peut-être que ce n'est tout simplement pas disponible lors d'une "normale" tâche cron appel?
Assurez-vous que la variable est défini lors de votre bash (utilisateur root) n'est shell de connexion.
OriginalL'auteur Kai | 2014-10-02
Vous devez vous connecter pour publier un commentaire.
Vous avez en fait deux questions.
stdin: is not a tty
?Ce message d'avertissement est imprimé par
bash -l
. Le-l
(--login
) options de demandebash
pour démarrer le shell de connexion, par exemple, celui qui est habituellement lorsque vous entrez votre mot de passe. Dans ce casbash
attend de sesstdin
pour être un vrai terminal (par exemple, laisatty(0)
appel doit retourner 1), et il n'est pas vrai s'il est exécuté parcron
—d'où cet avertissement.Un autre moyen facile de reproduire cet avertissement, et le très fréquent, est l'exécution de cette commande via
ssh
:Cela se produit parce que
ssh
ne pas allouer un terminal lorsqu'il est appelé avec une commande comme un paramètre (on devrait utiliser-t
option pourssh
pour forcer l'attribution des bornes dans ce cas).-l
?Comme l'a si bien dit par @Cyrus dans les commentaires, la liste des fichiers qui
bash
charges sur démarrer dépend du type de la session. E. g. pour les shells de login, il vous permettra de charger/etc/profile
,~/.bash_profile
,~/.bash_login
, et~/.profile
(voir INVOCATION dans le manuel debash(1)
), tandis que pour les non-shells de login, il ne charge que les~/.bashrc
. Il semble que vous avez défini votrehttp_proxy
variable que dans l'un des fichiers chargés pour les shells de login, mais pas dans~/.bashrc
. Vous l'avez déplacé à~/.wgetrc
et c'est correct, mais vous pouvez également le définir dans~/.bashrc
et il aurait travaillé.OriginalL'auteur afenster
dans votre .de profil, modifier
à
OriginalL'auteur user1130176
J'ai fini par mettre la configuration du proxy dans le wgetrc. Il n'y a pas besoin d'exécuter le script sur un shell de connexion plus.
Ce n'est pas une vraie réponse au problème, mais il a résolu le mien.
Si vous rencontrez ce problème, vérifiez si vous êtes l'obtention de toutes les variables d'environnement définies comme vous vous attendez. Grâce à Cyrus pour me mettre dans la bonne direction.
OriginalL'auteur Kai