Ich möchte Cron auf meinem Mac verwenden. Ich wähle es über launchd
, weil ich mein neues Wissen auch unter Linux einsetzen möchte. Ich kann jedoch den crontab -e
-Befehl nicht zum Laufen bringen. Es geht los, ich gebe meinen Testjob ein:
0-59 * * * * mollerhoj3 echo "Hello World"
Aber nach dem Speichern und Beenden (:wq
),
crontab -l
sagt:
No crontab for mollerhoj3
Was mache ich falsch?
Folgen Sie einfach diesen Schritten:
crontab -e
.Geben Sie Ihren Cron-Job ein, zum Beispiel:
30 * * * * /usr/bin/curl --silent --compressed http://example.com/crawlink.php
Drücken Sie Esc um den Einfügemodus von vim zu verlassen.
crontab: installing new crontab
. Sie können die crontab-Datei mit crontab -l
überprüfen.Beachten Sie jedoch, dass dies je nach Inhalt Ihrer ~/.vimrc
-Datei möglicherweise nicht funktioniert.
Ich hatte dieses Problem noch nie, aber ich erstelle eine ~/.crontab-Datei und bearbeite diese (was mir erlaubt, sie zu sichern, Time Machine oder anders) und dann auszuführen
crontab ~/.crontab
Hat seit über 20 Jahren für mich gearbeitet und viele Unix-Geschmacksrichtungen kennengelernt.
NOTE: Die Antwort, die besagt, dass der Befehl ZZ
verwendet werden soll, funktioniert für mich auf meinem Mavericks-System nicht. Dies liegt jedoch wahrscheinlich an etwas in meiner vim-Konfiguration, denn wenn ich mit einem makellosen .vimrc
beginne, die akzeptierte Antwort funktioniert. Meine Antwort könnte für Sie funktionieren, wenn die andere Lösung nicht funktioniert.
Unter MacOS X muss gemäß der Crontab-Manpage die temporäre Crontab-Datei, die mit crontab -e
erstellt wird, direkt bearbeitet werden. Vim kann nicht standardmäßig bearbeitet werden (, es kann jedoch ein Sonderfall zur Unterstützung von crontab -e
auftreten). Wenn Ihre Umgebungsvariable $EDITOR
auf vi
(Standardeinstellung) oder vim
gesetzt ist, schlägt die Bearbeitung der Crontab immer fehl .
Damit Vim die Datei direkt an Ort und Stelle bearbeiten kann, müssen Sie Folgendes tun:
:setlocal nowritebackup
Auf diese Weise können Sie die Crontab aktualisieren, wenn Sie crontab -e
mit den Befehlen :wq
oder ZZ
ausführen.
Sie können einen automatischen Befehl in Ihrer .vimrc hinzufügen, damit dies beim Bearbeiten von Crontabs automatisch funktioniert:
autocmd FileType crontab setlocal nowritebackup
Eine andere Möglichkeit ist das Hinzufügen von setlocal nowritebackup
zu ~/.vim/after/ftplugin/crontab.vim
, das von Vim automatisch geladen wird, wenn Sie eine Crontab-Datei bearbeiten, wenn das Filetype-Plugin aktiviert ist. Sie können auch nach dem Betriebssystem suchen, wenn Sie Ihre Vim-Dateien auf mehreren Plattformen verwenden:
""In ~/.vim/after/ftplugin/crontab.vim
if has("mac")
setlocal nowritebackup
endif
Von der Verwendung von cron unter OS X wird abgeraten. stattdessen wird launchd
verwendet. Versuchen Sie man launchctl
, um loszulegen. Sie müssen spezielle XML-Dateien erstellen, die Ihre Jobs definieren und mit bestimmten Berechtigungen an einem bestimmten Ort ablegen.
Sie müssen normalerweise nur launchctl load
herausfinden
http://nb.nathanamy.org/2012/07/schedule-jobs-using-launchd/
Bearbeiten
Wenn Sie wirklich cron unter OS X verwenden möchten, überprüfen Sie diese Antwort: https://superuser.com/a/243944/2449
Ich habe zwei Dinge getan, um dieses Problem zu lösen.
EDITOR = emacs crontab -e
(Ich habe keine Ahnung, warum vim nicht funktioniert)crontab -l
now druckt die Cronjobs. Jetzt muss ich nur noch herausfinden, warum die Cronjobs immer noch nicht laufen ;-)
Wie bereits erwähnt, ist cron veraltet (wird jedoch unterstützt), und für OS X wird launchd empfohlen.
Dies wird von developer.Apple.com übernommen.
Wenn das System ausgeschaltet oder im Schlaf ist, werden Cron-Jobs nicht ausgeführt. Sie werden erst ausgeführt, wenn der nächste festgelegte Zeitpunkt eintritt.
Wenn Sie einen Startauftrag planen, indem Sie den StartCalendarInterval-Schlüssel festlegen und der Computer im Ruhezustand ist, wenn der Auftrag ausgeführt werden soll, wird der Auftrag ausgeführt, sobald der Computer aktiviert wird. Wenn der Computer jedoch zu dem Zeitpunkt, zu dem der Job ausgeführt werden soll, ausgeschaltet ist, wird der Job erst ausgeführt, wenn der nächste festgelegte Zeitpunkt eintritt.
Alle anderen Startaufträge werden übersprungen, wenn der Computer ausgeschaltet oder im Ruhezustand ist. Sie werden erst ausgeführt, wenn der nächste festgelegte Zeitpunkt eintritt.
Wenn der Computer zum geplanten Zeitpunkt des Jobs immer ausgeschaltet ist, werden Cron-Jobs und Launch-Jobs niemals ausgeführt. Wenn Sie beispielsweise nachts immer Ihren Computer ausschalten, ist ein Job für 1 Uhr vormittags geplant. wird niemals ausgeführt werden.
In Benutzer crontab (crontab -e
) muss das Benutzerfeld nicht eingefügt werden.
Richtige cron ist:
0-59 * * * * echo "Hello World"
Syntax mit Benutzerfeld gilt nur für /etc/crontab
:
0-59 * * * * mollerhoj3 echo "Hello World"
Da die vorherigen Beiträge aufgrund einiger Berechtigungsprobleme für mich nicht funktionierten, stellte ich fest, dass das Erstellen einer separaten Crontab-Datei und das Hinzufügen der Crontab-Datei des Benutzers mit dem Parameter -u während Root für mich gearbeitet hat.
Sudo crontab -u {USERNAME} ~/{PATH_TO_CRONTAB_FILE}
Der Fehler crontab: temp file must be edited in place
ist darauf zurückzuführen, wie vim Sicherungsdateien behandelt.
Um vim mit cron zu verwenden, fügen Sie die folgenden Zeilen in Ihr .bash_profile ein.export EDITOR=vim
alias crontab="VIM_CRONTAB=true crontab"
Quelle der Datei:source .bash_profile
Und dann in deine .vimrc hinzufügen:if $VIM_CRONTAB == "true"
set nobackup
set nowritebackup
endif
Dadurch werden Sicherungen deaktiviert, wenn Sie vim mit cron verwenden. Und Sie können mit crontab -e
Cronjobs hinzufügen/bearbeiten.
Wenn Sie Ihren Cronjob erfolgreich speichern, wird die folgende Meldung angezeigt:crontab: installing new crontab
Quelle:
http://drawohara.com/post/6344279/crontab-temp-file-must-be-edited-in-placeLinkbeschreibung hier eingeben
Das Obige enthält eine Mischung aus richtigen Antworten. Was für mich die gleichen Fehler hatte, lautete:
1) Bearbeiten Sie Ihre Bash-Konfigurationsdatei
$ cd ~ && vim .bashrc
2) Stellen Sie in Ihrer bash-Konfigurationsdatei sicher, dass der Standardeditor vim und nicht vi ist (was das Problem verursacht).
export EDITOR = vim
3) bearbeiten sie ihre vim config datei
$ cd ~ && vim .vimrc
4) Vergewissern Sie sich, dass set backupcopy in Ihrer .vimrc-Datei ja ist
set backupcopy = yes
5) Terminal neu starten
6) Versuchen Sie nun Crontab Edit
$ crontab -e
10 * * * * Echo "Hallo Welt"
Sie sollten sehen, dass die Crontab-Datei korrekt erstellt wird. Wenn Sie vim (entweder ZZ oder: wq) beenden und crontab mit folgendem Befehl auflisten; Sie sollten den neuen Cronjob sehen. Hoffe das hilft.
$ crontab -l