Utiliser la crontab de l'emploi envoyer du courrier, de La messagerie texte se tourne vers un fichier joint qui a nommé ATT00001.bin
Je veux l'analyse de certaines données dans un serveur linux,puis envoyer le comme texte de l'Email de mon compte e-Mail , Mais lorsque j'execute ce shell scripts en shell de commande, Il fonctionne bien, Bizarre, c'est que quand j'ai mis toute la procédure à suivre dans la crontab de l'emploi, Le texte de l'Email va se tourne vers un fichier joint, quelqu'un Peut-il aider?
#* * * * * sh -x /opt/bin/exec.sh >> /opt/bin/mailerror 2>&1
/* exec.sh */
#/bin/sh
cd /opt/bin
./analysis.sh > test
mail -s "Today's Weather" example@example.com < test
Mais quand je l'execute exec.sh en ligne de commande shell directement, L'e-Mail sera obtenir de texte, quelqu'un Peut m'expliquer pour moi, grille grâce.
OriginalL'auteur Alex | 2013-09-25
Vous devez vous connecter pour publier un commentaire.
A couru dans le même problème que moi, seulement je suis la tuyauterie de sortie de texte dans
mailx
- Héritage mailx 12.4 7/29/08Lors de l'exécution du script sur la ligne de commande de l'e-mail est sorti comme normal email avec un corps de texte.
Cependant, quand j'ai couru exactement le même script via
crontab
le corps de l'email est venu comme une pièce jointe - ATT00001.BIN (Outlook), application/octet-stream (mutt) ou "noname" (Gmail).A pris un peu de recherche pour trouver cela, mais va ici:
Problème
Mailx, s'il rencontre des inconnus ou des caractères de contrôle d'entrée de texte, de le convertir en une pièce jointe avec l'application/octet-stream type mime défini.
À partir de la page de man:
Si vous devez supprimer ces caractères de contrôle, ce qui peut être fait avec c'est à dire
tr
Cependant depuis que j'ai eu norvégien des caractères UTF8: æøå - la liste élargir, et vous n'avez pas vraiment envie de maintenir une telle liste, et je besoin le norvégien caractères.
Et l'inspection de la pièce jointe, j'ai trouvé que j'avais seulement \r, \n "régulier" des caractères ASCII dans la gamme 32-176 - tous imprimable et 184 et 195 --> UTF8
Solution
Explicitement définir les paramètres régionaux de votre script:
Exécuter
export
dans votre shell ousetenv
si vous exécutezcsh
outcsh
pour déterminer ce que vos paramètres régionaux.Explication
Mailx - lorsque vous exécutez dans votre shell - LANG .UTF8, permettra d'identifier correctement les caractères UTF8 et continuer.
Lorsque vous exécutez dans
crontab
LANG n'est pas définie, et par défaut à LANG=C, car par défaut crontab sera exécuté seulement un ensemble limité de variables d'environnement (système de charge).mailx (ou d'autres programmes) puis pas reconnaître les caractères UTF8 et de déterminer que l'entrée contenait alors inconnu des caractères de contrôle.
Ma question était de caractères UTF8, la vôtre peut-être d'autres caractères de contrôle dans votre entrée. Le lancer à travers
hexdump
ouod -c
, mais puisqu'il fonctionne bien dans un shell, je suis soupçonner LANG questions.Références:
Merci pour votre réponse. Réglage de la langue à l'intérieur de mon script résolu le problème pour moi.
OriginalL'auteur sastorsl
J'ai eu ce même problème et aucun résolu le problème. En déplaçant le retour supplémentaire dans le fichier corrigé le problème pour moi:
Grâce à ce forum:
https://forums.opensuse.org/showthread.php/445955-mailx-creates-unwanted-attachment
OriginalL'auteur adivis12
Assurez-vous de changer cela dans votre script
être remplacé par
Pour en venir au problème
Votre script suppose qu'il est exécuté à partir d'un répertoire particulier (à noter que presque chaque chemin est un chemin relatif, et non pas un chemin absolu). cron s'exécute à partir d'un autre répertoire.
Le Correctif pour le texte figurant sur l'email
Explication
$0 est (éventuellement relatif) de nom de fichier du script shell en cours d'exécution. Donné un nom de fichier, le nom du dossier de commande renvoie le répertoire contenant le nom de fichier.
Donc, que des modifications de la ligne pour le répertoire contenant le script ou le quitte avec un code d'erreur si l'une des dirname ou cd échoue.
OU essayez d'avoir le chemin complet comme
Remarque: Le même problème est abordé plus tôt ici
SUIVI:
Essayez de supprimer
sh -x /opt/bin/exec.sh >> /opt/bin/mailerror 2>&1
et au lieu d'utiliser
sh /opt/bin/exec.sh 2>&1 >> /opt/bin/mailerror
SUIVI
Vous devez redémarrer cron pour que les modifications prennent effet si vous n'utilisez pas la commande crontab à éditer le fichier.
Pas de travail, quoi d'autre pouvez-vous penser
hey, mec, j'ai essayé la solution, mais tous ont échoué, je ne sais pas quoi faire avec elle.
merci de poster à la commande uname de sortie et aussi votre script complet de sortie
Voir mise à jour de réponse
OriginalL'auteur SriniV