Hace unos años configuré un trabajo cron para hacer ping automáticamente a una URL cada minuto como parte de un sistema de monitoreo (eso es una simplificación excesiva, pero servirá para esta pregunta). Como soy una persona horrible, no documenté esto en ningún lado.
Hoy, años después, comencé a tener problemas con la aplicación en el otro extremo de la URL que se está haciendo ping. Lo arreglé, pero luego me di cuenta, no tengo idea de dónde viene este trabajo cron .
¿Hay alguna manera de buscar rápidamente o eliminar todos los crontabs en un sistema en particular? Tengo acceso a la raíz, por lo que los permisos no son un problema. Solo he sido un usuario cron
, nunca he analizado demasiado su implementación, pero mis instintos * nix dicen que tiene que haber un grupo de archivos de texto en algún lugar que contenga todos los crontabs. Simplemente no sé dónde estarían, y si profundizara en ello, me daría miedo encontrar algunos, pero no todos, o perder algunos matices extraños del sistema.
Además, me doy cuenta con acceso raíz que pude
- Obtenga una lista de todos los usuarios en el sistema
su
como usuariocrontab -l
- Repita con todos los usuarios.
pero estoy buscando algo un poco menos manual (y estoy buscando aprender algo sobre la implementación de cron)
Respuestas:
Solo hay unos pocos lugares donde los crontabs pueden esconderse:
/etc/crontab
/etc/cron.d/*
/etc/crond.{hourly,daily,weekly,monthly}/*
estos se llaman desde
/etc/crontab
, así que tal vez un asterisco en esto/var/spool/cron/*
(a veces/var/spool/cron/crontabs/*
)Asegúrese de verificar
at
también, que mantiene sus trabajos en/var/spool/at/
o/var/spool/cron/at*/
Además, en lugar de
Solo haz esto:
fuente
Crontabs viven en
/etc/crontab
(y con muchas implementaciones) sus componentes en/etc/cron.*/*
(todos editados por root) y en/var/spool/cron/*
(crontabs de usuarios)Si tiene problemas para localizar el trabajo ofensivo, otro enfoque es investigar uno mientras continúa. Por ejemplo, puede agregar una regla de firewall para registrar la identificación de usuario del proceso que abre las conexiones en
example.com
el puerto 80:Si el trabajo está utilizando una aplicación como
ping
ocurl
, sombree el binario habitual mediante un contenedor que registre información sobre lo que lo está utilizando, con un script como este en/usr/local/bin
:fuente
La manera rápida y sucia:
La ubicación exacta donde se almacenan los crontabs puede variar de un sistema a otro, pero generalmente está en
/var/spool
y tienecrontab
algún lugar en el nombre.También tenga en cuenta que muchos sistemas tienen crontabs del sistema (como en )
/etc/crontab
,/etc/cron.d
algunos de los cuales pueden llamar a más scripts como/etc/cron.hourly
,.daily
...fuente
Eso suena como un cronjob creado por crontab. No todos los crontabs tienen un
-u
interruptor, pero para GNU / Linux está disponible. Esta es una línea útil para enumerar todos los cronjobs creados por crontab.(Ejecutar como root)
fuente
Si todo lo demás falla, puede hacer un honeypot con la URL que está solicitando, es decir, servir un archivo grande o algo así y buscar el proceso que está esperando recibir los datos, y luego buscar su PPID.
fuente
Cualquier sistema decente debería explicar la ubicación precisa de los crontabs en la página de manual (generalmente en la
FILES
sección cerca del final, y también para otros demonios).En mi sistema, por ejemplo,
cron(8)
contiene lo siguiente:Y secundo el consejo de tylerl de buscar
at
trabajo mientras estás en ello.fuente
Abordarlo al revés: cron mantiene un registro de lo que está haciendo, precisamente para evitar este tipo de problemas en primer lugar. En mi sistema, el registro se mantiene
/var/cron/log
y se ve así:Esta línea me dice que la instancia cron con PID 20232 en la máquina se
fortress
está ejecutando/home/vucar/lighttpd-watchdog
en nombre del usuariovucar
. Un sistema con buen comportamiento solo tiene un cron en ejecución, por lo que será sencillo.Esto también funciona para
at
trabajos, ya que generalmente solo se los entregan a cron de todos modos:Los fragmentos son de un sistema BSD, pero es muy probable que el concepto general sea el mismo en cualquier otro lugar.
fuente