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


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

ś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ł


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


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


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.


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?


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.



-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.


z sudotobą umieścisz zadania crona pod rootem użytkownika. Pliki cron są różne dla twojego normalnego użytkownika i roota.
Timofey,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.