Wenn ich diesen Mail-Befehl über das Terminal ausführe, gibt es keine Probleme:
mail -s "Test Mail" [email protected] < home/user/example.txt
Wenn ich es einem Bash-Skript hinzufüge, das dies hauptsächlich tut, gibt es keine Probleme:
tmpString=$(ssh user@server `perl -s` < /home/user/perlscript.pl 2> errorfile.txt)
mail -s "Test Mail" [email protected] < home/user/example.txt
Wenn ich jedoch eine Crontab zum Ausführen des Bash-Skripts erstelle, wird die E-Mail nie gesendet:
10 14 * * * /home/user/mybashscript
Ich erhalte jedoch eine E-Mail von cron job über die Ausgabe. Die E-Mail mit dem Betreff "Test Mail" kommt nie an.
Hat jemand dieses Problem schon einmal gehabt?
Die Spur:
Ok, ich werde nur einige der persönlichen Namen ändern. Die E-Mail sollte vor dem letzten Echo gesendet werden, wird aber nicht in der Ablaufverfolgung angezeigt?
+ . /home/user/.bashrc
++ PS1=`\u@\h \w$`
++ TERM=vt100
++PATH=/usr/sbin:/usr/bin:/bin
++ ssh user@example `perl -s`
+ scriptString=`$VAR` = ``\``Build was OK`\``;`
+echo `$VAR1`= ``\``Build was OK`\``;`
$VAR1 = `Build was OK`;
+ [[ $VAR1 = `Build was OK`; == *\B\u\i\l\d\ \f\a\i\l\e\d* ]]
+ echo
Vielen Dank!
echo
es in einer Datei, um sicherzustellen, dass Ihr Cron-Job ausgeführt werden kann?Antworten:
crontab
habe nicht die gleiche Umgebung wie du, also im oberen Teil deines Skripts nach dem shebang , stellen :Dadurch wird PATH für den untergeordneten Prozess festgelegt.
Ändern Sie außerdem die
shebang
zu#!/bin/bash -x
drehen Debug ON und in deinemcrontab
mach das :und komm wieder mit dem Debug-Trace.
quelle
\u@\h \w$
++ TERM = vt100 ++ PATH = / usr / sbin: / usr / bin: / bin ++ ssh user @ exampleperl -s
+ scriptString =$VAR
=\
Build war in Ordnung`
; `+ Echo$VAR1
=\
Build war in Ordnung`
; `$ VAR1 =Build was OK
; + [[$ VAR1 =Build was OK
; == \ B \ u \ i \ l \ d \ f \ a \ i \ l \ e \ d ]] + Echo