Error al agregar cronjobs en Mac OS X Lion

37

Hasta ahora, nunca he intentado agregar una crontask en mi Mac. Para mi sorpresa, arrojó un error ...

[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

¿Cómo puedo averiguar por qué está arrojando ese error?

Estoy ejecutando Mac OS X Lion 10.7.2

Hayek
fuente
2
¿Estás usando cron por una razón específica? En OS x ha sido reemplazado en gran medida por launchd
Daniel Beck
Quería usar vnstat para rastrear el uso del ancho de banda, lo que requiere un cronjob. Sé que podría usar una aplicación alternativa, pero aún sería útil saber cómo hacer que cron funcione en Mac, si es posible.
Hayek
1
¿Has intentado crontab fileinstalar la tabla desde un archivo externo? ¿O usando un editor diferente como EDITOR=NANO crontab -e?
Lri
@DanielBeck Uso cron porque es mucho más rápido configurar una nueva entrada que launchd.
Doug Harris
¿Qué crontab -lmuestra? ¿Hay algún otro mensaje en /var/log/cron.logo /var/log/system.log?
Doug Harris

Respuestas:

41

En ~ / .vimrc agregue:

    autocmd tipo de archivo crontab setlocal nobackup nowritebackup
usuario442586
fuente
gran truco simple! funciona bien para mi
Tri Nguyen
Esta es la mejor respuesta y funciona bien, mucho más simple que la que implica establecer una variable env en el perfil de shell y editarla~/.vimrc
RichVel
Marcar esto como la respuesta correcta ya que mi propia respuesta ya no es apropiada ni la más efectiva.
Hayek
1
¡Esto también funciona en Mac OS High Sierra! Gracias por publicar esto
Kearney Taaffe
44

El problema resultó ser viy nada que ver con cron. Haciéndolo export EDITOR=vimarreglado

Hayek
fuente
2
Sí, entiendo que encontraste el problema, y ​​la solución es ... ¿qué?
Gökhan Barış Aker
3
Intenta hacerlo y export EDITOR=vimluego pruébalo.
Hayek
Gracias @ Hayek. Perdón por la latencia, no pude responder tan rápido como tú: P. Sin embargo, ejecutar crontab con el todopoderoso 'sudo' resolvió mi problema.
Gökhan Barış Aker
Me alegra que lo hayas hecho funcionar.
Hayek
1
Acabo de tener el mismo problema. La configuración EDITOR=vimno lo solucionó, solo me llevó a un nuevo error crontab: temp file must be edited in place. Prefiero vim, sin embargo, edito cronjobs con tanta frecuencia que estoy bastante feliz de hacerlo NANO... aunque si alguien conoce la solución, estoy muy interesado.
Ricardo
35

En un problema relacionado, si recibe el mensaje:

crontab: temp file must be edited in place

Tratar:

1) Agregar a .bash_profile

alias crontab="VIM_CRONTAB=true crontab"

2) Agregar a .vimrc

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

Fuente: http://drawohara.com/post/6344279/crontab-temp-file-must-be-edited-in-place

xgMz
fuente
2
¡¡Esta es la respuesta correcta!!
Jacob
Esto funcionó para mí y creo que esta debería ser la respuesta correcta.
Shubhamoy
1
Para csh o tcsh, usealias crontab "export VIM_CRONTAB=true; /usr/bin/crontab"
JAFaucett el
1
También creo que esta es una mejor respuesta, aunque la pregunta del OP no menciona el error exacto que @xgMz describió. No parece que a crontab le guste la copia de seguridad de vim en el comportamiento de escritura / guardado, por lo que deshabilitarlo como se describe aquí simplemente funciona.
Shyam Habarakada
Acabo de tener este problema con vim y cron en macOS Sierra. ¡Esta es la respuesta correcta!
James McCormac el
8

Su editor en la variable de sistema EDITOR es vi y vi no funciona.

Tratar:

export EDITOR=nano
Abdel Karim Mateos Sanchez
fuente
2

Tuve el mismo problema y seguí los consejos publicados para crear la tabla:

crontab file

Y eso creó la tabla cron, y luego pude ejecutar

crontab -e

con vi como editor predeterminado y no tuve problemas. Es como si vi no pudiera guardar el archivo, pero una vez creado, podría acceder a él. Esto es consistente con poder ejecutar:

sudo crontab -e 

Como curiosidad, las tablas se almacenan en

/usr/lib/cron/tabs/UserName

que solo se puede leer como sudo.

usuario214155
fuente
0

La mejor manera de diagnosticar esto sería crear un crontab nuevo con una entrada simple como:

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

Si eso funciona, entonces el problema es con el comando específico que ha agregado. ¿Podría compartirlo con nosotros y también compartir los resultados cuando lo ejecute directamente desde Terminal.app, en lugar de hacerlo desde un crontab?

tog22
fuente
1
El mismo error con el comando que sugirió. En terminal, /bin/datevuelve Wed Nov 23 15:03:49 PST 2011como se esperaba.
Hayek
OK, acaba de ver su respuesta, lo que explica por qué se obtendría el mismo error - sólo pensé que podría ayudar a diagnosticar el problema :)
tog22
0

cron está en desuso a favor de launchd.

Lingon es una gran herramienta para configurar agentes de lanzamiento; solía ser gratis pero ahora parece ser de $ 3.

Wikipedia tiene una buena launchd página que describe todas las llaves y la herramienta launchctl utiliza para activar / desactivar ellos.

chrish
fuente
-1

Vi este mismo problema en OSX. La respuesta es ejecutar como root usando el comando sudo, por ejemplo:

sudo crontab -e

Tengo esa idea de Gökhan Barış Aker arriba.

Nathan Beach
fuente
con sudousted va a colocar trabajos cron bajo usuario root. Los archivos cron son diferentes para su usuario normal y el root.
Timofey