Kaçak Crontab Nasıl Bulunur?


17

Birkaç yıl önce, bir izleme sisteminin parçası olarak her dakika otomatik olarak bir URL'ye ping işlemi yapmak için bir cron işi ayarladım (bu aşırı basitleştirme, ancak bu soru için yapacak). Korkunç bir insan olduğum için bunu hiçbir yerde belgelemedim.

Bugün, yıllar sonra, pinglenen URL'nin diğer ucundaki uygulama ile sorun yaşamaya başladım. Çözdüm, ama sonra fark ettim, bu cron işinin nereden geldiğini bilmiyorum .

Belirli bir sistemdeki tüm crontabları hızlı bir şekilde aramanın veya bulmanın bir yolu var mı? Kök erişimim var, bu yüzden izinler sorun değil. Ben sadece bir kullanıcı cronoldum, ben asla onun uygulama çok derinlemesine baktım, ama benim * nix içgüdülerim tüm crontabs tutan bir yerde metin dosyaları bir grup olması gerektiğini söylüyor. Nerede olduklarını bilmiyorum ve içine girsem, bazılarını bulmaktan korkuyorum, ama hepsini değil, ya da sistemin tuhaf bir nüansını kaçırırdım

Ayrıca, root erişimi ile

  1. Sistemdeki tüm kullanıcıların bir listesini alın
  2. su kullanıcı olarak
  3. crontab -l
  4. Tüm kullanıcılarla tekrar et

ama biraz daha az manuel bir şey arıyorum (ve cron uygulaması hakkında bir şeyler öğrenmek için arıyorum)


2
bu bağlantıya bakmanız gerekebilir - stackoverflow.com/questions/134906/…
Daniel t.

Yanıtlar:


20

Crontabs'un saklayabileceği sadece birkaç yer var:

  • /etc/crontab
  • /etc/cron.d/*
  • /etc/crond.{hourly,daily,weekly,monthly}/*
    bunlardan çağrılır /etc/crontab, belki bu konuda bir yıldız işareti
  • /var/spool/cron/*(bazen /var/spool/cron/crontabs/*)

Emin kontrol etmek Be atkendi işlerini tutar yanı sıra, hangi /var/spool/at/ya/var/spool/cron/at*/

Ayrıca,

su <user>
crontab -l

Sadece bunu yap:

crontab -lu <user>

8

Crontabs /etc/crontabbileşenlerinde /etc/cron.*/*(hepsi kök tarafından düzenlenmiş ) ve içinde ( birçok uygulama ile) yaşar ve/var/spool/cron/* (kullanıcıların crontabs'ı) .

Sorun teşkil eden işi bulmakta sorun yaşıyorsanız, başka bir yaklaşım devam ederken araştırmaktır. Örneğin, example.com80 numaralı bağlantı noktasında işlem açma bağlantılarının kullanıcı kimliğini günlüğe kaydetmek için bir güvenlik duvarı kuralı ekleyebilirsiniz :

iptables -A OUTPUT -p tcp --syn -d example.com --dport 80 -j LOG --log-prefix "[->example.com] " --log-uid

İş pingveya gibi bir uygulama kullanıyorsa curl, olağan ikili dosyayı, ne kullandığına ilişkin bilgileri günlüğe kaydeden bir sarıcı ile gölgede tutun /usr/local/bin:

#!/bin/sh
{
  date
  echo "$0" "$@"
  ps -p $PPID
  echo
} >>"/tmp/$(basename "$0").log"
exec "/usr/bin/$(basename "$0")" "$@"

+1, çünkü sorunu nasıl açıklayacağınızı gösterir!
Joe

6

Hızlı ve kirli yol:

grep -r ping /var/spool/cron/crontabs

Crontabs'un saklandığı tam konum sistemden sisteme değişebilir, ancak genellikle içinde /var/spoolve adında bir crontabyere sahiptir .

Ayrıca birçok sistemler olduğunu not sistemi (gibi crontab dosyalarına /etc/crontab, /etc/cron.d) bunlardan bazıları gibi daha komut çağırabilir /etc/cron.hourly, .daily...


4

Bu krontab tarafından yaratılan bir cronjob gibi geliyor. Tüm crontabs'ların bir -uanahtarı yoktur, ancak GNU / Linux için kullanılabilir. Bu, crontab tarafından oluşturulan tüm cronjobs'u listelemek için kullanışlı bir satırdır.

for user in $(awk -F':' '{ print $1}' /etc/passwd); do crontab -u $user -l; done

(Kök olarak çalıştır.)


2

Her şey başarısız olursa, istediği URL'den bir bal küpü yapabilir - yani büyük bir dosya veya başka bir şey sunabilir - ve verileri almayı bekleyen işlemi arayabilir ve ardından PPID'sini arayabilirsiniz.


2

İyi bir sistem, crontabs'ın FILESmanpagedeki kesin konumunu açıklamalıdır (genellikle sonun yakınındaki bölümde ve ayrıca diğer dæmonslar için).

Örneğin sistemimde cron(8)aşağıdakileri içerir:

 FILES
      /etc/crontab          system crontab file
      /var/cron/atjobs      directory containing at(1) jobs
      /var/cron/log         cron's log file
      /var/cron/tabs        directory containing individual crontab files
      /var/cron/tabs/.sock  used by crontab(1) to tell cron to check for
                            crontab changes immediately

Ve ikinci tylerl'in siz işteyken de atişleri kontrol etmesini tavsiye ediyorum .


2

Buna başka bir şekilde yaklaşmak: cron tam olarak bu tür sorunları önlemek için ne yaptığının bir kaydını tutar. Sistemimde, günlük tutulur /var/cron/logve şöyle görünür:

==> /var/cron/log <==
Oct 25 00:21:01 fortress cron[20232]: (vucar) CMD (/home/vucar/lighttpd-watchdog)

Bu satır, makinede PID 20232 bulunan cron örneğinin kullanıcı adına fortressyürütüldüğünü söylüyor . İyi davranılmış bir sistemin sadece tek bir cronu vardır, bu yüzden bu basit olacaktır./home/vucar/lighttpd-watchdogvucar

Bu aynı zamanda işler için de işe atyarar, çünkü genellikle sadece cron'a teslim edilirler:

==> /var/cron/log <==
Oct 25 00:28:01 fortress cron[31282]: (vucar) ATJOB (1414189680.c)

Parçacıklar BSD sistemindendir, ancak genel konsept büyük olasılıkla diğer her yerde aynıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.