Cron vs ;

 ( ptamas | 2018. szeptember 28., péntek - 14:29 )

Sziasztok

Mi a különbség a következő két cron bejegyzés között?:

a: 30 * * * * /valami/script.ksh parameter egy ketto harom

b: 00 * * * * echo "$(date) /valami/script.ksh elindul az $(uname -n) gepen" >> /valami.log; /valami/script.ksh parameter egy ketto harom; RC=$? ; echo "$(date) /valami/script.ksh lefutott $(uname -n) gepen $RC eredmennyel">>/valami.log

Amit tudni kell /valami/script.ksh is logol a /valami.log-ba. És az én problémám a következő

a esetben a script elvégzi a dolgát és ezt be is írja a logba
b esetben a script csinál, vagy nem valamit, de a logban csak a két echo kimentetét látom folyamatos 0-ás RC-vel, ami nem csoda, mert a script utolsó sora "exit"

Adalék a script mindenféle java parancsokkal operál, és csak nézegetni tudom, nincs rá írási jog.
Leteszteltem egy teszt környezetben a következő shell scripttel:


#!/bin/ksh

log=/tmp/cronenv.$(date +%F:%T)
echo " command is $0 $*" > $log
echo env: >> $log
env >> $log
echo "\n\nset" >> $log
set >> $log

A különbséget a két log között csak a
PPID, és a RANDOM változókban látok.

Mellesleg ha az echo-s sort bevágom a terminálba, akkor a shell script is dolgozik rendesen, és firkálja a logot.
A nagy kérdés, mi okozhatja a KSH script működési zavarát? A nyomravezetőnek egy írásbeli vállveregetést ígérhetek.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Miért nem írsz rá egy wrapper scriptet és hívod azt meg cronból?

Egy negyedév végi zárás elég ok ahhoz, hogy apró darabokra zúznák a kezem, ha hozzányúlnék, és valami nem menne.
De egyébként freeze period végén hasonlót teszek.

Egyébként nem a megoldás a kérdés, csak a magyarázat, arra, hogy mi történik másként és megtaláltam a magyarázatot is.

command is /home/USER/crontest.ksh egy ketto harom
4587718 /usr/sbin/cron
51839010 sh -c echo hello >>/dev/null; /home/USER/crontest.ksh egy ketto harom;
36307188 /bin/ksh /home/USER/crontest.ksh egy ketto harom
53280902 proctree -p 36307188

Ez az én testscriptem amikor több parancs van összefűzve

És amikor magában:
command is /home/USER/crontest.ksh egy ketto harom
4587718 /usr/sbin/cron
24641724 /bin/ksh /home/USER/crontest.ksh egy ketto harom
25559150 proctree -p 24641724

És a scriptben megtalálható egy ellenőrzés, hogy önmagán kívül fut-e másik instance:

typeset -i instances
instances=-1
ps -ef | grep -v "grep" | grep "$0" | while read proc
do
if [[ $proc != "" ]]; then
instances=$instances+1
fi
done

if [[ $instances -ge 1 ]]; then
exit
fi

Ezért az "exit" -ért simán felkoncolnám a script fejlesztőjét. Aki még nem hallott PID fileról és az exit command argumentumairól.

[off]0-s, nem 0-ás[/off]

Mondjál kicsit több mindent a környezetről!

- /valami/script.ksh -nak van futtatási joga?
- Biztos vagy benne, hogy ksh futtatja?
- Mi történik, ha b) esetben az echo-kat nem a valami.log-ba, hanem egy *másik* logfájlba irányítod. Akkor is eltűnik a script.ksh saját logja?
- Mi történik, ha b) esetben a második echo nem a valami.log-ba, hanem egy *másik* logfájlba irányítod. Akkor is eltűnik a script.ksh saját logja?
- Mi történik, ha b) esetben az első echo-t nem a valami.log-ba, hanem egy *másik* logfájlba irányítod. Akkor is eltűnik a script.ksh saját logja?

(Szerintem amúgy a 2. echo átirányítása miatt veszik el, de ez egyelőre halvány megérzés.)

(És egy off:
> a logban csak a két echo kimentetét látom folyamatos 0-ás RC-vel, ami nem csoda, mert a script utolsó sora "exit"

Fenti okfejtés hibás, mert az exit (paraméterek nélkül) az exit $? -lel ekvivalens, nem az exit 0 -val. Azaz azért kapsz RC=0-t, mert a script utolsó parancsa (ami az exit előtt utoljára lefut) 0-val tér vissza.

=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?

- /valami/script.ksh -nak van futtatási joga?
igen

- Biztos vagy benne, hogy ksh futtatja?
cron alapból az sh-t használja a jobok futtatására, viszont a script #!/bin/ksh -val kezdődik, így erősen esélyes a korn shell.
Egyébiránt az AIX-ben az sh egy hardlink a ksh-ra, tudom nem mindenben egyformán viselkednek.

Igazad van exit valóban úgy működik.

Viszont a nullás return code predesztinált mivel egy if után a then ágban önmagában áll.

OK, és mi van a "mi történik" kezdetű sorokkal, mert az érdekesebb :-)

=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?

szerintem az [a] a /valami/script.ksh belső történéseit fogja logolni, a script belső szabályai szerint.

a [b] pedig az cron történéseit.

de mivel a cron rootként fut, a script meg valószínűleg valamelyik user crontabjában van, nem fog a logba írni mert azt a root hozta létre.

ez csak első blick:)