कैसे एक भगोड़ा Crontab खोजने के लिए


17

कुछ साल पहले मैं एक मॉनिटरिंग सिस्टम के हिस्से के रूप में हर मिनट एक URL को स्वचालित रूप से पिंग करने के लिए एक क्रॉन जॉब सेट करता हूं (यह ओवरसिम्प्लीफिकेशन है, लेकिन यह इस प्रश्न के लिए करेगा)। क्योंकि मैं एक भयानक व्यक्ति हूं, मैंने इसे कहीं भी दस्तावेज नहीं किया।

आज, वर्षों बाद, मुझे उस URL के दूसरे छोर पर एप्लिकेशन से परेशानी होने लगी, जिसे पिंग किया जा रहा है। मैंने इसे ठीक कर दिया, लेकिन फिर महसूस किया, मुझे पता नहीं है कि यह क्रोन नौकरी कहां से आ रही है

क्या किसी सिस्टम पर सभी क्रॉन्ब्स को जल्दी से खोजने या बाहर निकालने का एक तरीका है? मेरे पास रूट एक्सेस है इसलिए अनुमतियां समस्या नहीं हैं। मैं केवल कभी का उपयोगकर्ता cronरहा हूं, मैंने कभी इसके कार्यान्वयन पर बहुत गहराई से नहीं देखा है, लेकिन मेरे * निक्स इंस्टिंक्ट्स कहते हैं कि टेक्स्ट फ़ाइलों का एक समूह होना चाहिए जो कहीं न कहीं सभी crontabs को पकड़ता है। मुझे नहीं पता कि वे कहां होंगे, और अगर मैंने इसमें खोद लिया तो मुझे कुछ मिलने का डर होगा, लेकिन उन सभी को नहीं, या सिस्टम की कुछ अजीब बारीकियों को याद नहीं करना चाहिए।

इसके अलावा, मुझे लगता है कि मैं रूट एक्सेस के साथ महसूस कर सकता हूं

  1. सिस्टम में सभी उपयोगकर्ताओं की एक सूची प्राप्त करें
  2. su एक उपयोगकर्ता के रूप में
  3. crontab -l
  4. सभी उपयोगकर्ताओं के साथ दोहराएँ

लेकिन मैं कुछ कम मैनुअल की तलाश कर रहा हूं (और क्रोन के कार्यान्वयन के बारे में कुछ सीखना चाहता हूं)


2
आपको इस लिंक को देखना पड़ सकता है - stackoverflow.com/questions/134906/…
डैनियल टी।

जवाबों:


20

वहाँ केवल कुछ स्थानों crontabs छिपा सकते हैं:

  • /etc/crontab
  • /etc/cron.d/*
  • /etc/crond.{hourly,daily,weekly,monthly}/*
    ये कहा जाता है /etc/crontab, इसलिए शायद इस पर एक तारांकन चिह्न है
  • /var/spool/cron/*(कभी-कभी /var/spool/cron/crontabs/*)

के atरूप में अच्छी तरह से जाँच करता है, जो अपने काम में रहता है /var/spool/at/या सुनिश्चित करें/var/spool/cron/at*/

इसके अलावा, के बजाय

su <user>
crontab -l

बस यह करें:

crontab -lu <user>

8

Crontabs रहते हैं /etc/crontabऔर (कई कार्यान्वयन के साथ) में इसके घटक/etc/cron.*/* (सभी रूट द्वारा संपादित), और /var/spool/cron/*(उपयोगकर्ताओं के crontabs)।

यदि आपको अपमानजनक नौकरी का पता लगाने में परेशानी हो रही है, तो एक और तरीका यह है कि इसकी जांच की जाए। उदाहरण के लिए, आप example.comपोर्ट 80 पर कनेक्शन खोलने के लिए यूजर आईडी लॉग इन करने के लिए एक फ़ायरवॉल नियम जोड़ सकते हैं :

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

यदि नौकरी जैसे किसी एप्लिकेशन का उपयोग कर रही है pingया curl, सामान्य बाइनरी को एक रैपर द्वारा छाया दें जो इस बारे में जानकारी लॉग करता है कि इसका उपयोग क्या है, तो इस तरह की स्क्रिप्ट के साथ /usr/local/bin:

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

+1 क्योंकि यह दिखाता है कि समस्या को कैसे समझा जाए!
जो

6

त्वरित और गंदा तरीका:

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

सटीक स्थान जहां क्रॉस्टैब संग्रहीत हैं, सिस्टम से सिस्टम में भिन्न हो सकते हैं, लेकिन यह आम तौर पर है /var/spoolऔर crontabनाम में कहीं है।

यह भी ध्यान दें कि कई सिस्टम में सिस्टम क्रॉस्टैब्स होते हैं (जैसे ) /etc/crontab, /etc/cron.dजिनमें से कुछ अधिक स्क्रिप्ट को कॉल कर सकते हैं /etc/cron.hourly, जैसे .daily...


4

यह एक क्रोनजॉब की तरह लगता है जो क्रॉस्टैब द्वारा बनाया गया था। सभी crontabs में एक -uस्विच नहीं है, लेकिन GNU / Linux के लिए यह उपलब्ध है। Crontab द्वारा बनाए गए सभी क्रोनोजर को सूचीबद्ध करने के लिए यह एक आसान रेखा है।

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

(रूट के रूप में चलाएँ।)


2

यदि अन्य सभी विफल हो जाते हैं, तो आप URL के बाहर एक हनीपॉट बना सकते हैं जिसका वह अनुरोध कर रहा है - यानी एक बड़ी फ़ाइल या कुछ और परोसें - और उस प्रक्रिया की तलाश करें जो डेटा प्राप्त करने की प्रतीक्षा कर रही है, और फिर उसका PPID देखें।


2

किसी भी सभ्य प्रणाली को मैनपेज में कॉन्ट्रैब्स के सटीक स्थान की व्याख्या करनी चाहिए (आमतौर पर FILESअंत के पास अनुभाग में, और अन्य डॉमन्स के लिए भी)।

उदाहरण के लिए मेरे सिस्टम पर, cron(8)निम्नलिखित शामिल हैं:

 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

और मैं दूसरी टायलर की सलाह है कि atआप इसे करते समय नौकरियों की जांच करें ।


2

इसे दूसरे तरीके से स्वीकार करना 'राउंड: क्रोन एक लॉग रखता है कि वह क्या कर रहा है, ठीक इस तरह की समस्याओं से बचने के लिए। मेरे सिस्टम पर, लॉग इन रखा जाता है /var/cron/logऔर इस तरह दिखता है:

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

यह पंक्ति मुझे बताती है कि मशीन पर पीआईडी ​​20232 के साथ क्रोन का उदाहरण उपयोगकर्ता की ओर से fortressनिष्पादित हो रहा है । एक अच्छी तरह से व्यवहार प्रणाली में केवल एक ही क्रोन चल रहा है, इसलिए यह सीधा होगा।/home/vucar/lighttpd-watchdogvucar

यह atनौकरियों के लिए भी काम करता है , क्योंकि वे आमतौर पर वैसे भी क्रोन को सौंपते हैं:

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

स्निपेट एक बीएसडी प्रणाली से हैं, लेकिन सामान्य अवधारणा हर जगह एक समान है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.