Portál AbcLinuxu, 10. května 2025 22:46

Dotaz: Cron spoští příkazy dvakrát

23.10.2011 09:36 Martin
Cron spoští příkazy dvakrát
Přečteno: 498×
Odpovědět | Admin
Zdravím, předem chci podotknout, že nejsem žádný specialista v linuxu, takže se ne úplně ve všem vyznám.

Mám následující problém. V cronu mám příkazy wget, které mi spouští danou URL v daný čas. Problém ovšem je, že když si do cílového skriptu dám "insert into test (date) values (NOW())" vidím, že se skript pouští ve 20:30:01 a 20:30:03 atp. Pokaždé je spuštěn dvakrát za sebou.

První věc, není to wgetem, i když použiji --tries=1 tak je to to samé. Dále hlavním vodítkem je, že i když crontab promažu, tak se ty původní (staré) záznamy spouští stejně, jakoby byl v linuxu ještě nějaký další cron, který si kdysi zkopíroval starý crontab a teď ho provádí.

Když totiž přidám nové záznamy, tak je vše v pořádku, adresa se zavolá jen jednou, ale ty původní příkazy se provádějí stále.

Moc dík všem za rady, už si nevím rady.

Systém: Fedora 14 cronie.x86_64 1.4.8-2.fc14
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.10.2011 10:17 NN
Rozbalit Rozbalit vše Re: Cron spoští příkazy dvakrát
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tipuji, ze mas prikazy jak v /etc/crontab, tak v uzivatelskem crontabu (/var/spool/cron/crontabs/ ..

NN
23.10.2011 13:07 Martin
Rozbalit Rozbalit vše Re: Cron spoští příkazy dvakrát
Bohužel, žádný takový adresář jsem nenašel, našel jsem druhý crontab, ale ten je prázdný. Problém setrval i když jsem odinstaloval a znovu nainstaloval cron.
23.10.2011 13:17 cold | skóre: 16 | Brno
Rozbalit Rozbalit vše Re: Cron spoští příkazy dvakrát
crontab -e a /etc/cron.d/*, taky tam musis mit /etc/cron.daily atd. tam se podivej

anebo
find /var/spool -type f | xargs grep -i "wget "
find /etc/ -type f | xargs grep -i "wget "
admin@linuxsystems.cz
23.10.2011 20:29 Martin
Rozbalit Rozbalit vše Re: Cron spoští příkazy dvakrát
prohledal jsem cely disk a nenasel jsem krome crontabu nic, kde by byl ulozen ten kod, takze jedine ze by to bylo v nejakym binu
23.10.2011 21:13 l4m4
Rozbalit Rozbalit vše Re: Cron spoští příkazy dvakrát
Teoreticky bys ještě mohl mít běžícího druhého cron démona (jak by k tomu mohlo dojít, nevím). Jak vypadá ps -C crond, nebo raději ps -e | grep cron?
24.10.2011 07:37 Martin
Rozbalit Rozbalit vše Re: Cron spoští příkazy dvakrát
Tam je spuštěn jen jeden cron. Spíš to vypadá, jako by byla v systému ještě jedna podobná služba, která si kdysi dávno zkopírovala obsah crontabu a teď běžela nezávisle. Cokoliv nového přidám do crontabu, tak se dvakrát už nespouští, pouze staré záznamy.
24.10.2011 07:44 Martin
Rozbalit Rozbalit vše Re: Cron spoští příkazy dvakrát
Přikládám výpis procesů

PID TTY TIME CMD
1 ? 00:00:00 init
2 ? 00:00:00 kthreadd
3 ? 00:00:18 ksoftirqd/0
4 ? 00:00:05 migration/0
5 ? 00:00:08 migration/1
6 ? 00:00:13 ksoftirqd/1
7 ? 00:00:09 migration/2
8 ? 00:00:09 ksoftirqd/2
9 ? 00:00:04 migration/3
10 ? 00:00:09 ksoftirqd/3
11 ? 00:00:17 events/0
12 ? 00:00:18 events/1
13 ? 00:00:58 events/2
14 ? 00:00:22 events/3
15 ? 00:00:00 cpuset
16 ? 00:00:00 khelper
19 ? 00:00:00 netns
20 ? 00:00:00 async/mgr
23 ? 00:00:00 xenwatch
24 ? 00:00:00 xenbus
56 ? 00:00:00 sync_supers
58 ? 00:00:00 bdi-default
60 ? 00:00:02 kblockd/0
61 ? 00:00:13 kblockd/1
62 ? 00:00:55 kblockd/2
63 ? 00:00:07 kblockd/3
68 ? 00:00:00 kseriod
117 ? 00:01:59 kswapd0
118 ? 00:00:00 aio/0
119 ? 00:00:00 aio/1
120 ? 00:00:00 aio/2
121 ? 00:00:00 aio/3
122 ? 00:00:00 crypto/0
123 ? 00:00:00 crypto/1
124 ? 00:00:00 crypto/2
125 ? 00:00:00 crypto/3
136 ? 00:00:00 khvcd
293 ? 00:00:00 kstriped
296 ? 00:00:00 ksnapd
318 ? 00:39:57 kjournald
359 ? 00:00:00 kauditd
369 ? 00:00:00 udevd
426 ? 00:00:09 httpd
510 ? 00:00:03 httpd
525 ? 00:08:09 httpd
544 ? 00:01:06 flush-202:1
878 ? 00:00:01 rsyslogd
893 ? 00:01:29 irqbalance
914 ? 00:00:00 mdadm
936 ? 00:00:00 acpid
951 ? 00:00:00 udevd
953 ? 00:00:00 udevd
1209 ? 00:01:35 searchd
1221 ? 00:00:01 sshd
1244 ? 00:08:01 httpd
1260 ? 00:00:00 vsftpd
1300 ? 00:00:00 mysqld_safe
1316 ? 00:03:22 java
1673 ? 12:12:18 mysqld
1823 ? 00:15:40 httpd
1841 ? 00:00:10 ksmtuned
1867 ? 00:00:00 libvirtd
1901 tty1 00:00:00 mingetty
1954 ? 00:00:00 dnsmasq
2256 ? 00:00:00 httpd
2887 ? 00:00:02 httpd
8302 ? 05:09:25 java
8527 ? 00:00:00 httpd
8554 ? 00:00:04 httpd
8746 pts/0 00:00:00 ps
8863 ? 00:00:10 httpd
11382 ? 00:07:59 httpd
12552 ? 00:00:00 sshd
12635 ? 00:08:04 httpd
13120 ? 00:01:45 java
14287 ? 00:00:00 httpd
15115 ? 00:00:01 httpd
16071 pts/0 00:00:00 bash
16163 ? 00:00:00 httpd
16164 ? 00:00:00 httpd
16688 ? 00:03:14 java
16695 ? 04:42:09 java
16755 ? 00:04:11 java
18082 ? 00:06:52 httpd
18771 ? 00:07:19 httpd
28150 ? 00:07:58 httpd
28182 ? 00:03:03 java
28583 ? 00:00:02 httpd
28659 ? 00:00:00 httpd
31934 ? 00:00:00 sleep
32308 ? 00:00:03 httpd
24.10.2011 10:41 l4m4
Rozbalit Rozbalit vše Re: Cron spoští příkazy dvakrát
Nějaká úžasná nová vychytávka při přechodu systemd?

Pokud opravdu nevíš, co ti ten wget spouští, tak nahraď wget programem, který vypíše svůj strom rodičů. Např. prostě skriptem (s výstupem někam poslaným)
echo "self: $$"
i=$$
while test $i != 1; do
    i=$(cut -d' ' -f4 /proc/$i/stat)
    c=$(cut -d' ' -f2 /proc/$i/stat)
    echo "parent: $i $c"
done
25.10.2011 00:10 pletiplot | skóre: 14
Rozbalit Rozbalit vše Re: Cron spoští příkazy dvakrát
Tohle je tedy prasárna, ale mohlo by to pomoct. Lama to napsal dost složitě, takže pro začátečníka ti s tím pomůžu: 1) najdi program wget příkazem which wget (asi bude v /usr/bin/wget) 2) přejmenuj ho na na wget-bak 3) místo něj vytvoř soubor wget, do kterýho zapíšeš ten script, který napsal Lama (na první řádek přidej ještě #!/bin/sh) 4) nech to proběhnout 4.1) výstup toho cronu přijde pravděpodobně mailem rootovi. 4.2) Pokud ne, zapiš za první echo a za poslední done toto: >>/tmp/soubor.txt a znovu to nech proběhnout. 5) až to bude, vrať zpátky původní wget
25.10.2011 12:39 Martin
Rozbalit Rozbalit vše Re: Cron spoští příkazy dvakrát
Moc dík za radu. Tak jsem zjistil následující, ale ještě z toho moc chytrý nejsem. Po nahrazení wgetu tím skriptem se mi v logu zobrazilo toto self: 16079
parent: 16077 (crond)
parent: 30339 (crond)
parent: 1 (init)

Z čehož plyne, že se adresa zavola jen jednou, ale presto jsem mel v databazi zaznam. To znamena ze mi ten stejny log musi volat uplne stejny server, jinak mi to nedava smysl. Moc dik vsem, takze v systemu to nebude, budu muset hledat mimo server.
24.10.2011 10:48 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Cron spoští příkazy dvakrát
Odpovědět | | Sbalit | Link | Blokovat | Admin
Daj prehladat /etc a /var (asi staci iba /var/spool) na retazec wget. Pripadne aj home.
If you hold a Unix shell up to your ear, you can you hear the C.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.