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.