it-swarm.com.de

Warum habe ich bei Verwendung von vim keinen Crontab-Eintrag unter OS X?

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?

73
mollerhoj

Folgen Sie einfach diesen Schritten:

  1. Im Terminal: crontab -e.
  2. Drücken Sie i um in den Einfügemodus von vim zu gelangen.
  3. Geben Sie Ihren Cron-Job ein, zum Beispiel:

    30 * * * * /usr/bin/curl --silent --compressed http://example.com/crawlink.php
    
  4. Drücken Sie Esc um den Einfügemodus von vim zu verlassen.

  5. Art ZZ um vim zu verlassen (muss in Großbuchstaben geschrieben sein).
  6. Sie sollten die folgende Meldung sehen: 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.

178
Cao Manh Dat

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.

67

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
37
Dave Meybohm

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://developer.Apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/launchctl.1.html

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

22
Andy

Ich habe zwei Dinge getan, um dieses Problem zu lösen.

  1. Ich habe die in diesem Link beschriebene Crontab-Datei berührt coderwall.com/p/ry9jwg (Danke @Andy).
  2. Verwendet Emacs anstelle meines Standard-vim: EDITOR = emacs crontab -e (Ich habe keine Ahnung, warum vim nicht funktioniert)

crontab -lnow druckt die Cronjobs. Jetzt muss ich nur noch herausfinden, warum die Cronjobs immer noch nicht laufen ;-) 

7
mollerhoj

Unterschied zwischen cron und launchd

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.

Auswirkungen des Schlafens und Ausschaltens

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.

5
Roobie Nuby

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"
4
user3130043

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}
0
ShaneMit

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

0
SR8H

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

0
Jimmy M.G. Lim