ugrás a tartalomhoz

crond mizériám

s_volenszki · 2008. Nov. 6. (Cs), 22.43
Sziasztok!

Meg kell mondanom, sohasem gondoltam volna, hogy az első éles webszerver ismerkedésem egy banális apróságon hasal el...

Közületek már páran olvashatták topicomat a hup.hu-n, most szeretném a ti véleményeteket is kikérni.

Van egy virtual szervereünk CentOS-vel. Kaptam hozzá ssh-t és kifogástalanul működik az elérés.

Tegnap előtt úgy döntöttem teszek egy task-ot az /etc/crontab fájlba. A task egy php fájlt hivogat óránként az ehhez a szerverhez tartozó webroot-ban. Láttam műxik, gondoltam minden ok. Kitöröltem a task-ot az /etc/crontab fájlból és mondtam neki, hogy /etc/init.d/crond restart.

A helyzet az, hogy a task ugyan úgy fut tovább. Ezek után kaptam a hup-on néhény jótanácsot (pl.: beszéljek a rendszergazdával) és mondtam, hogy crontab -e, erre ő, hogy "No crontab for root", aztán mondtam, hogy crontab -r és ő még mindíg azt mondta, hogy "No crontab for root".

Elkezdtem keresni a PID-jét a processznek: ps aux aztán ps aux | grep php aztán lsof | grep php aztán ps -edaf | grep php...nem találtam semmit (vagy nem tudom, hogy amit találtam, azok között van-e amit keresek).

Ezek után azt mondtam /etc/init.d/crond stop majd reboot. Ujraindulás után a task ugyan úgy lefut óránként.

Mit javasoltok, hol kutakodjak?
 
1

/etc/cron.*

zila · 2008. Nov. 7. (P), 09.39
Nézd meg az /etc/crontab file-t, az /etc/cron.d könyvtárat.
Azt is leellenőrizheted, hogy kinek a nevében fut a cron (/var/log/cron fileba naplózik)
Ha abban benne van és nem a root futtatja, akkor a crontab -e usernev paranccsal szerkesztheted az adott user crontabját.

Azt tudni kell, hogy ha az /etc/crontab file-t szerkeszted, akkor a crontab -l root nem fogja listázni a jobot.
A másik, hogy nem kell újraindítani a crond-t a crontab file szerkesztésekor.

A ps aux meg lsof csak akkor fogja mutatni a jobodat amikor az éppen fut, és persze kilőni is csak akkor tudod (és ha valahol a cronba van beragadva, akkor hiába lövöd ki, a megadott ütemezéssel újra fogja indítgatni)
2

Köszi, nézem!

s_volenszki · 2008. Nov. 7. (P), 10.14
Szia!

Köszi, megnézem! Képzeld, tegnap este leállítottam a crond-t (/etc/init.d/crond stop), ma reggel meg ezt mondja:

login as: *****
****##kukac##*****.hu's password:
Last login: Fri Nov 7 08:27:11 2008 from **********.hu
[****##kukac##*****.hu ~]# /etc/init.d/crond status
crond (pid 8322) is running...
[****##kukac##*****.hu ~]# /etc/init.d/crond stop
Stopping crond: cannot stop crond: crond is not running. [FAILED]

Most akkor mi van?

s_volenszki
3

Fura

zila · 2008. Nov. 7. (P), 10.26
Valami nem kerek azzal a centos-szel :(

Én ezt tenném:

# /etc/init.d/crond stop
# ps aux | grep cron
# kill -SIGTERM pid(ek)
# /etc/init.d/crond status
# /etc/init.d/crond start
Ha jól rémlik akkor centos-en a /sbin/service paranccsal szokták a szolgáltatásokat bizgerálni, tehát
/sbin/service crond stop
/sbin/service crond start
/sbin/service crond status
persze ettől függetlenül az init.d-s módszerrel is illenék mennie.
4

Hát...

s_volenszki · 2008. Nov. 7. (P), 10.38

[*****@***** /]# /etc/init.d/crond stop
Stopping crond: cannot stop crond: crond is not running.   [FAILED]
[*****@*****  /]# ps aux | grep cron
****      8322  0.0  0.6  74792  1128 ?        Ss   08:19   0:00 crond l
****      9025  0.0  0.4  61152   712 pts/0    R+   09:30   0:00 grep cron
[*****@***** /]# kill -SIGTERM 8322
[*****@***** /]# /etc/init.d/crond status
crond is stopped
[*****@***** /]# /etc/init.d/crond start
Starting crond:                                            [  OK  ]
[*****@***** /]# /etc/init.d/crond status
crond (pid 9070) is running...
Most ki kell várni az egész órát, hogy lefusson az esemény!

Megnéztem a log-ot, a következő felhasználók láthatóak:
root
CRON
*system*
5

Hogyan lehet elkapni?

s_volenszki · 2008. Nov. 7. (P), 10.52
Azt mondod, hogy a ps -eadf meg az lsof csak akkor találja meg ha éppen fut? Ez így elég elkeserítően hangzik. Számít az, hogy a szerver újraindul-e? Ha "beragad" valahova, akkor azt újraindítás után újra beragasztja?

Tegnap éjjel gugliztam a témára és találtam két érdekes dolgot:

Az egyik az volt, hogy azt írták, ha leállítom a cront, kiveszem a task-ot crontab-ból, akkor két lehetőségem van. Vagy megkeresem a process-t és kinyírom, vagy újraindítom a rendszert és kiürülnek azok a process-ek amelyek a task-hoz tartoztak.

A másik, hogy a process-eknek lehet négy állapota:

Runing
Waiting
Stopped
Zombie

Lehet ezeket ilyen formában lekérdezni? Gondoltam jó lenne látni a waiting és a zombie process-eket. Bár gondolom, ha waiting, akkor az legfeljebb a crond-t mutatja, hiszen az egy létező (vagy nem létező) fájlból olvassa az arra az időpontra, eseményre szánt feladatokat.

A task-om óránkénti volt. Ha kikommentelem a crontab-ból a run-parts /etc/cron.hourly tasko-ot és megvárjuk mi történik, azzal jutunk előrébb?

Ha kikommentelem a crontab-ban a
9

processek

zila · 2008. Nov. 7. (P), 12.33
A rendszerben éppen futó (vagyis inkább jelenlévő) processeit a top-pal, ps paranccsal tudod megnézni. A top ugye folyamatosan mutatja, a ps meg listázza őket. A top S oszlopában láthatod a processz állapotát (R/W/S/Z).
A ps aux esetében meg a STAT oszlopot kell figyelni ugyanezért.
(és persze man ps meg man top)
6

Még mindíg fut!

s_volenszki · 2008. Nov. 7. (P), 10.59
10:00 Még most is fut...
7

Cron csere?

janoszen · 2008. Nov. 7. (P), 11.33
Nekem a crondvel voltak problémáim. Utolsó megoldásnak mondanám, hogy próbáljátok meg lecserélni a crond-t.

Ami a problémát illeti, nem ismerem a CentOS-t, de Gentoo alatt pl az, hogy valaminek a státusza be van állítva valamire nem jelenti azt, hogy tényleg fut. Ennek az az oka, hogy még senki nem írta meg azt a tudományt, hogy a szoftverekről meg lehessen mondani, hogy futnak-e vagy sem (a pid file kivételével).
8

Valami történik!

s_volenszki · 2008. Nov. 7. (P), 12.26
Kikommenteltem a crontab-ból a run-parts /etc/cron.hourly tasko-ot és most nem futott le!

Megvizsgáltam tüzetesen a /et/cron.hourly/ könyvtár tartalmát:

mcelog.cron (tartalom ami nincs kikommentelve:)
/usr/sbin/mcelog --ignorenodev --filter >> /var/log/mcelog


@ravencore (tartalom ami nincs kikommentelve:)
. /etc/ravencore.conf
$RC_ROOT/sbin/run_cmd checkconf

Szóval hivatalosan ezek nem futnak le óránként. Ki kell derítenem, hogy mi micsoda!