Die gestartete Task kann nicht ausgeführt werden

3

Ich habe das einmal gemacht und ich versuche es auf einem neuen Computer und ich kann nicht sehen, was ich falsch mache.

Ich habe ein Ruby-Skript in meinem Benutzerordner namens "forecast.rb". Ich habe es auf ausführbar gesetzt (a + x). Es schreibt eine Zeile in eine andere Datei mit dem Namen .weather.txt.

Ich möchte "forecast.rb" alle 5 Minuten ausführen.

Ich habe eine Plist-Datei mit dem Namen com.jwhite.forecast_tmux.plist. Diese Datei sieht so aus:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.jwhite.forecast_tmux</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/jwhite/forecast.rb</string>
    </array>
    <key>StartInterval</key>
    <integer>300</integer>
</dict>
</plist>

Diese Datei befindet sich in ~ / Library / LaunchAgents. Und nachdem ich es dorthin verschoben habe, habe ich Launchctl load -w ~ / Library / Launchagents / com.jwhite.forecast_tmux.plist ausgeführt.

Wenn ich "forecast.rb" (./forecast.rb) ausführe, funktioniert es einwandfrei. Mein launchd wird jedoch nicht ausgeführt.

Was vermisse ich?

BEARBEITEN:

Ich habe mit der Verwendung von LaunchControl begonnen und den Fehler erhalten.

/Users/jwhite/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- geocoder (LoadError)
from /Users/jwhite/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /Users/jwhite/forecast.rb:3:in `<main>'

Aber wenn ich das vom Terminal aus starte, läuft alles gut. Also kann launchctl in Ruby Gems nicht lesen?

James White
quelle
Was ist die erste Zeile des RB-Skripts?
Mark
Das Etikett muss mit dem Dateinamen ohne die .plist übereinstimmen.
fd0
@ fd0 Tatsächlich. Das war ein schlechtes Kopieren / Einfügen, als ich das vorher gemacht habe. Ich habe die Beschreibung bearbeitet, um zu zeigen, was ich wirklich tue.
James White
@ Mark die erste Zeile ist#!/Users/jwhite/.rvm/rubies/ruby-2.2.1/bin/ruby
James White
Ist dein Benutzername jhwhite oder jwhite? Schauen Sie sich an, was Sie präsentiert haben.
fd0

Antworten:

1

Ich hatte das gleiche Problem, als ich versuchte, ein Skript in einem Intervall mit LaunchControl auszuführen (großartige App, probieren Sie es aus). Kopiert und fügt direkt aus der Quelle ein , die mir geholfen hat:

Für GUI-Programme werden die Standard-Shell-Umgebungsskripten ignoriert und daher Ruby-Versionen, die von RVM verwaltet werden.

Die Problemumgehung besteht darin, sie über launchctl zu definieren. Diese Werte gehen jedoch nach einem Neustart verloren, daher habe ich sie in .bash_profile abgelegt, da ich ohnehin immer eine Shell öffne (siehe unten).

launchctl setenv GEM_HOME ~ / .rvm / gems / ruby-2.2.1 launchctl setenv GEM_PATH ~ / .rvm / gems / ruby-2.2.1: /Users/markus/.rvm/gems/ruby-2.2.1@global

Alle permanenteren Lösungen (zB launchd.conf) funktionieren in 10.10 nicht mehr. Hoffe das hilft jedem, der auf ein ähnliches Problem gestoßen ist.

In meinem Fall habe ich einfach das richtige GEM_HOME und PATH in LaunchControl eingerichtet.

Jay
quelle