
Hintergrund - auf dem System sind zwei verschiedene Versionen von Ruby installiert. Ich muss die neueste Version verwenden, um das von mir erstellte Monitorskript auszuführen
Dies ist meine Crontab-Zeile:
0 * * * * /usr/local/rvm/rubies/ruby-2.2.1/bin/ruby /home/nexpose/ruby/console_monitor.rb
Wenn ich dies ausführe:
/usr/local/rvm/rubies/ruby-2.2.1/bin/ruby /home/nexpose/ruby/console_monitor.rb
es funktioniert wie erwartet und sendet mir sogar eine E-Mail wie vorgesehen
Wenn ich das Syslog überprüfe, sehe ich nicht viel. Ich sehe, dass es ausgeführt wird, aber es werden keine Fehler angezeigt.
# which ruby
/usr/local/rvm/rubies/ruby-2.2.1/bin/ruby
# ruby -v
ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]
Hat das mit meiner PATH-Konfiguration zu tun? Ich dachte, ich umgehe dies, indem ich direkt auf die Ruby-Binärdatei verweise?
Antwort1
Denken Sie daran, dass Cron-Jobs nur minimale Umgebungseinstellungen haben. Sie haben nicht die Einstellungen, die Sie in einer interaktiven Shell sehen. Cron führt nicht aus ~/.login
, ~/.bashrc
usw.
Um Fehler eines Cron-Jobs anzuzeigen, ist es meiner Meinung nach am einfachsten, STDOUT und STDERR in eine Datei umzuleiten, z. B. > /tmp/cron.out 2>&1
an den Crontab-Eintrag anzuhängen. Andernfalls könnte Ihr System die Ausgabe in eine E-Mail-Nachricht an den Besitzer der Crontab packen.