¿Por qué se ejecutó mi trabajo cron este mes?

31

Hoy es el 1 de noviembre de 2016 o en números (no ambiguos), 2016-11-01.

Tengo un trabajo cron de usuario configurado de esta manera:

# m h  dom mon dow   command
33  3   1  */2  *    /home/user/...

Se supone que debe ejecutarse cada dos meses el primero del mes a las 3:33 a.m., sin importar el día de la semana que sea, pero por alguna razón se ejecutó hoy, a pesar de que 11 no es divisible por 2.

Puede alguien explicarme esto? ¿Es errónea mi suposición de divisibilidad por 2?

EDITAR: Olvidé mencionar, estoy ejecutando la cronversión "3.0pl1-127 + deb8u1" en una máquina Debian 8.6 "Jessie".

comfreak
fuente
2
Posible duplicado de ¿Por qué mi crontab no funciona y cómo puedo solucionarlo?
user9517 es compatible con GoFundMonica el
Entonces, estás hablando del día 11 del mes 2016 del año 1. :) (El orden de fecha más común en Estados Unidos es mes-día-año)
Polluelos el
@chicks revisa el historial de edición de esta pregunta, originalmente usé el formato que mencionaste ;-)
comfreak el
@chicks te refieres a mes / día / año?
user253751
@immibis No. ... comfreak: jajaja
chicas el

Respuestas:

61

La /no es una expresión aritmética, sino que describe "valores de paso" sobre el rango permitido de valores. Entonces, dado que los meses siempre comienzan en 1lugar de 0, /2significaría "tomar cualquier otro valor", lo que da como resultado (1, 3, 5, 7, 9, 11).

Esto también se describe en la página del manual, aunque esto no es terriblemente claro y fácil de entender:

Los valores de paso se pueden usar junto con rangos Seguir un rango con "<número>" especifica saltos del valor del número a través del rango. Por ejemplo, "0-23 / 2" se puede usar en el campo de horas para especificar la ejecución del comando cada dos horas (la alternativa en el estándar V7 es "0,2,4,6,8,10,12,14,16 , 18,20,22 "). También se permiten pasos después de un asterisco, por lo que si desea decir "cada dos horas", simplemente use "* / 2".

Sven
fuente
2
Gracias por su respuesta, acabo de darme cuenta de esto después de leer la página del manual de nuevo y pensar en esto. Por lo general, solo estaba trabajando con trabajos cron a corto plazo donde los números comienzan con 0 y mi suposición realmente tenía sentido de alguna manera.
comfreak el
18
Acabo de pensar por qué esta pregunta no se hace con más frecuencia y llegué a la misma conclusión: porque pocas personas realizan trabajos con algo más que un "*" en el campo del mes.
Sven
Una pregunta, ¿qué pasaría si el número no se divide, por ejemplo */5? ¿Sería 1,6,11,1,6 ... o sería 1,6,11,4,9 ...? Supuse que "sobre el rango permitido de valores" significa que no tiene memoria, pero ahora no estaba tan seguro de eso.
MariusSiuram
@MariusSiuram: la primera variante. Nuevamente, esta no es una operación aritmética. crondsolo toma la lista de valores posibles, aplica el selector de pasos una vez y luego usa estos resultados repetidamente.
Sven
4

Hoy es el primer día de noviembre.

* / 2 significa que su cronjob se ejecutará cada dos meses como usted dice.

Entonces, el próximo mes (diciembre) el cronjob no se ejecutará, pero sí el mes (enero) después.

El mes anterior a este mes (octubre) no se ejecutó el cronjob. Pero en septiembre lo fue.

Huérfanos
fuente
1
Por lo tanto, considera que */2en el campo del mes es equivalente a 1-11/2, en lugar de 2-12/2. No digo que esté equivocado, pero ¿puede presentar alguna documentación de respaldo?
MadHatter apoya a Monica el
@MadHatter Sven lo explicó bien.
Huérfanos el
1
Estoy de acuerdo, y lo mejor de todo es que citó fuentes autorizadas.
MadHatter apoya a Monica el
2
Solo señalando, septiembre precede a octubre y no agosto ;-)
hjpotter92