Błąd podczas dodawania cronjobs w Mac OS X Lion

37

Do tej pory nigdy nie próbowałem dodawać crontask na moim komputerze Mac. Ku mojemu zaskoczeniu spowodowało to błąd ...

[hayek@mac:/www/] 02:33:22 PM: crontab -e                                                                                                         1 .
crontab: no crontab for hayek - using an empty one
crontab: "/usr/bin/vi" exited with status 1

Jak mogę dowiedzieć się, dlaczego powoduje ten błąd?

Korzystam z systemu Mac OS X Lion 10.7.2

Hayek
źródło
2
Czy używasz crona z konkretnego powodu? W systemie OS x został w dużej mierze zastąpiony przez wydanego
Daniel Beck
Chciałem użyć vnstat do śledzenia wykorzystania przepustowości, co wymaga cronjob. Wiem, że mógłbym użyć alternatywnej aplikacji, ale nadal warto wiedzieć, jak uruchomić crona na komputerze Mac, jeśli to w ogóle możliwe.
Hayek,
1
Czy próbowałeś crontab filezainstalować tabelę z zewnętrznego pliku? Lub używając innego edytora, takiego jak EDITOR=NANO crontab -e?
Lri
@DanielBeck Używam crona, ponieważ konfiguracja nowego wpisu jest znacznie szybsza niż uruchomiona.
Doug Harris
Co crontab -lpokazuje Czy są jakieś inne wiadomości w /var/log/cron.loglub /var/log/system.log?
Doug Harris

Odpowiedzi:

41

W ~ / .vimrc dodaj:

    autocmd typ pliku crontab setlocal nobackup nowritebackup
użytkownik442586
źródło
świetna prosta sztuczka! działa dobrze dla mnie.
Tri Nguyen,
To najlepsza odpowiedź i działa dobrze - znacznie prościej niż ta obejmująca ustawienie zmiennej env w profilu powłoki oraz edycję~/.vimrc
RichVel
Oznaczenie tego jako prawidłowej odpowiedzi, ponieważ moja własna odpowiedź nie jest już odpowiednia ani najbardziej skuteczna.
Hayek
1
Działa to również w Mac OS High Sierra! Dzięki za opublikowanie tego
Kearney Taaffe
44

Problem okazał się być vii nie ma nic wspólnego z cronem. Robi export EDITOR=vimnaprawił

Hayek
źródło
2
Tak, rozumiem, że znalazłeś problem, a rozwiązaniem jest ... co?
Gökhan Barış Aker
3
Spróbuj, a export EDITOR=vimnastępnie spróbuj .
Hayek
Dzięki @Hayek. Przepraszam za opóźnienia, nie mogłem odpowiedzieć tak szybko, jak ty: P. Jednak uruchamianie crontaba z wszechmocnym „sudo” rozwiązało mój problem.
Gökhan Barış Aker
Cieszę się, że to działa.
Hayek
1
Właśnie miałem ten sam problem. Ustawienie tego EDITOR=vimnie naprawiło - po prostu doprowadziło mnie do nowego błędu crontab: temp file must be edited in place. Wolę vima, jednak edytuję cronjobs tak rzadko, że cieszę się, że to robię NANO... chociaż jeśli ktoś zna tę poprawkę, jestem bardzo zainteresowany.
Ricardo,
35

W przypadku podobnego problemu, jeśli pojawi się komunikat:

crontab: temp file must be edited in place

Próbować:

1) Dodaj do .bash_profile

alias crontab="VIM_CRONTAB=true crontab"

2) Dodaj do .vimrc

if $VIM_CRONTAB == "true"
    set nobackup
    set nowritebackup
endif

Źródło: http://drawohara.com/post/6344279/crontab-temp-file-must-be-edited-in-place

xgMz
źródło
2
To poprawna odpowiedź !!
Jacob
To działało dla mnie i uważam, że to powinna być poprawna odpowiedź.
Shubhamoy,
1
W przypadku csh lub tcsh użyjalias crontab "export VIM_CRONTAB=true; /usr/bin/crontab"
JAFaucett
1
Myślę też, że jest to lepsza odpowiedź, chociaż pytanie OP nie wspomina dokładnie o błędzie opisanym @xgMz. crontab nie wydaje się lubić kopii zapasowej vima przy zachowaniu zapisu / zapisu, więc wyłączenie go jak opisano tutaj po prostu działa.
Shyam Habarakada
Właśnie miałem ten problem z vimem i cronem na macOS Sierra. To poprawna odpowiedź!
James McCormac
8

Twój edytor w zmiennej systemowej EDITOR to vi i vi to nie działa.

Próbować:

export EDITOR=nano
Abdel Karim Mateos Sanchez
źródło
2

Miałem ten sam problem i postępowałem zgodnie ze wskazówkami dotyczącymi tworzenia tabeli:

crontab file

I to stworzyło tabelę cron, a potem mogłem uruchomić

crontab -e

z vi jako domyślnym edytorem i nie miał problemów. To tak, jakby vi nie mógł zapisać pliku, ale po utworzeniu może uzyskać do niego dostęp. Jest to zgodne z możliwością uruchamiania:

sudo crontab -e 

Co ciekawe, tabele są przechowywane w

/usr/lib/cron/tabs/UserName

które można odczytać tylko jako sudo.

użytkownik214155
źródło
0

Najlepszym sposobem na zdiagnozowanie tego byłoby utworzenie nowej tabeli crontab z prostym wpisem:

* * * * * /bin/date >> /tmp/cron_output

Jeśli to działa, problem dotyczy dodanego polecenia. Czy możesz podzielić się nim z nami, a także podzielić się wynikami, gdy wykonasz go bezpośrednio z Terminal.app, a nie z crontab?

tog22
źródło
1
Ten sam błąd w poleceniu, które zasugerowałeś. W terminalu /bin/datezwraca Wed Nov 23 15:03:49 PST 2011zgodnie z oczekiwaniami.
Hayek,
OK, właśnie zobaczyłem twoją odpowiedź, która wyjaśnia, dlaczego dostałeś ten sam błąd - pomyślałem, że może pomóc zdiagnozować problem :)
tog22
0

cron jest przestarzały na korzyść wersji uruchomionej.

Lingon to świetne małe narzędzie do konfigurowania uruchomionych agentów; kiedyś był darmowy, ale obecnie wydaje się, że kosztuje 3 USD.

Wikipedia ma dobrą stronę uruchomieniową opisującą wszystkie klawisze oraz narzędzie launchctl, którego używasz do aktywacji / dezaktywacji.

chrish
źródło
-1

Widziałem ten sam problem w OSX. Odpowiedzią jest uruchomienie jako root za pomocą polecenia sudo, np .:

sudo crontab -e

Ten pomysł dostałem od Gökhan Barış Aker powyżej.

Nathan Beach
źródło
z sudotobą umieścisz zadania crona pod rootem użytkownika. Pliki cron są różne dla twojego normalnego użytkownika i roota.
Timofey,