trabajos cron.daily no se ejecutan

19

Creé 3 trabajos cron diarios para ejecutar.

A continuación se muestran los tres que se colocan en etc / cron.daily

rkhunter.sh

#!/bin/sh
(
rkhunter --versioncheck
rkhunter --update
rkhunter --cronjob --report-warnings-only
) | mail -s 'rkhunter Daily Run (my server)' [email protected]

chkrootkit.sh

#!/bin/bash
chkrootkit | mail -s "chkrootkit Daily Run (my server)" [email protected]

logwatch.sh

#!/bin/sh
(
logwatch
) | mail -s 'logwatch Daily Log (my server)' [email protected]

Reemplacé [email protected] por supuesto con mi correo electrónico.

Si ejecuto este cronjob manualmente, funciona bien ./nameoffile.sh

Pero no funciona a diario, ¿cuál puede ser la causa o cómo puedo verificar esto?

estampido supersónico
fuente
2
Asegúrese de que los archivos que creó en cron.daily / semanal / por hora / etc. sean ejecutables, simplemente haga un chmod + x /etc/cron.daily/whatever
Turgut Kalfaoglu el

Respuestas:

6

Hay dos posibles sospechosos que generalmente provocan que los crontrabajos no puedan ejecutarse.

El primero son los problemas de permisos, es decir, un usuario puede ejecutar el script / comando pero el demonio cron no puede porque el trabajo está en los trabajos cron del usuario incorrecto. Por ejemplo, el usuario crea un script o ejecuta un comando con privilegios elevados, es decir sudo, usa , luego agrega el script / comando probado a su lista de trabajos cron ( crontab). El resultado es que el trabajo cron del usuario no podrá ejecutarse ya que necesita privilegios elevados.

  • Para poner un trabajo cron en el tipo crontab del usuario actual crontab -e
  • Para poner un trabajo cron en el tipo crontab de la raíz sudo crontab -e

La segunda razón son las rutas, para asegurarse de que el script se ejecutará, el usuario debe agregar la ruta completa al script que se ejecutará en crontab. Otra solución sería expandir la variable PATH de los usuarios raíz colocando la siguiente línea en la parte superior de su archivo crontab:

PATH=/usr/sbin:/usr/bin:/sbin:/bin

como menciona el wiki de la comunidad .

Es posible que desee leer el wiki de la comunidad sobre cron, ya que proporciona más detalles sobre lo anterior.

Stef K
fuente
Entonces, ¿acabo de poner el nombre de archivo allí?
sonicboom
En realidad, está diciendo que no hay un trabajo cron anterior para root y que va a escribir su primero y luego le pide que elija un editor para modificar el crontab. Simplemente elija uno del menú (1.bin / ed, etc.). Elija nano es fácil, solo preste atención a las instrucciones.
Stef K
Entonces, para ejecutar una vez al día a las 10 p.m., pondría * 22 * ​​* * test> rkhunter.sh ¿verdad?
sonicboom
ah impresionante! ¡Lo intentaré ahora mismo!
sonicboom
¿Para qué sirve la prueba> rkhunter.sh?
sonicboom
76

Según esta respuesta, el problema radica en la extensión .sh. Elimine eso (por ejemplo, cambie el nombre de su archivo de rkhunter.sh a rkhunter.

Para confirmar ejecuta el siguiente comando run-parts --test /etc/cron.daily

Si su script (rkhunter) está incluido en los resultados, todo está bien. Para obtener más información sobre el comando run-parts, lea las páginas man en élman run-parts

usuario19366
fuente
1
Esta es la respuesta que estaba buscando, después de varias pruebas, me di cuenta de que se ejecuta otro archivo de script sin extensión sh
Albert Català
55
como @rharriso dijo en su respuesta. no es tanto un problema con ".sh" como un problema con ".". se perderá cualquier archivo con cualquier extensión. para citar directamente de man run-parts"los nombres deben consistir completamente en letras mayúsculas y minúsculas ASCII, dígitos ASCII, guiones bajos ASCII y guiones menos ASCII"
northern-bradley
11

En mi sistema fue porque anacron no estaba instalado.

grep run-parts /etc/crontab

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Así que instale anacron o elimine la prueba -x / usr / sbin / anacron

Natim
fuente
1
+1 ¿No está instalado anacron por defecto? Hubiera esperado eso. Creo que eso me resolvería. Gracias.
lepe
Efectivamente, no estaba allí en el mío ... FFS, estoy seguro de que era, ¡ya que el guión se estaba ejecutando hace unos meses !: dpkg --get-selections | grep cron.. <
swears
Sí, tampoco sé qué sucedió, ya que es un paquete que generalmente se instala al inicio.
Natim
10
Esto no es realmente correcto. anacronno es necesario el ||operador en los comandos crontab se ejecuta run-partscuando anacron NO está instalado. Cuando anacronse instala, hace que esos run-partscomandos diarios / semanales / mensuales sean redundantes.
TalkLittle
Entonces, ¿tal vez fue porque las piezas de ejecución no funcionaron? En cualquier caso, la instalación de anacron me lo arregló.
Natim
10

Creo que los archivos con extensiones se ignoran.

correr:

 run-parts --test /etc/cron.daily

Si no ve sus scripts en la lista, elimine las extensiones .sh e intente nuevamente.

rharriso
fuente
5

Agregando a la respuesta Stef, también debe asegurarse de que tengan el bit ejecutable:

$ ls -l
-rwxr-xr-x  1 root root   268 Jun  1 08:06 00logwatch
-rwxr-xr-x  1 root root   311 May 22  2012 0anacron
-rwxr-xr-x  1 root root 15007 Jun  6 14:08 apt

Deberías poder ejecutarlos usando chmod +x filename.

Braiam
fuente
¿Qué archivos son estos? ¿Es el contenido de la carpeta /etc/logrotate.d?
realtebo hace
4

Cambie el nombre de su archivo para que no tenga la extensión .sh

Para verificar que este es el problema, intente

sudo run-parts --list /etc/cron.daily 

verá que no está en la lista. Entonces corre:

mv script.sh script

e intente enumerar nuevamente. Debería estar en la lista.

Elan Kivity
fuente
Este problema parece afectar a cualquier ejecutable que tenga una extensión. Tenía un nombre de archivo "filename.ca" y tampoco lo incluiría en la lista hasta que yo también lo cambiara por "nombre de archivo"
kiwicomb123
0

No pude ejecutarlo con anacron, eliminé el anacron /etc/crontaby lo ejecuté apt remove --purge anacrony funciona de inmediato.

No entiendo por qué necesitamos dos planificador.

Patrik Laszlo
fuente
0

La misma situación hoy aquí

yo hice

sudo journalctl -u cron -b | grep -i error

y encontrado

cron[815]: Error: bad hour; while reading /etc/crontab
cron[815]: (*system*) ERROR (Syntax error, this crontab file will be ignored)

Descubrí que alguien (¡yo!) Agregó una línea que comienza con

20 38 ...

¡y obviamente la hora 38 no existe!

Realtebo
fuente