Cron megáll

 ( redman | 2018. december 15., szombat - 21:13 )

Sziasztok,

Az Arubacloudnál van egy VPS-em (legkisebb 300Ft-os). Semmi fontos csak egy alap Debian van fent és cron-ból lefut percenként egy port forward továbbítási szabály iptables alapon. (GPS trackerek kommunikációját továbbítja a házi szerverhez, mert a GPS tracker nem tud névfeloldást csak IP címet. Otthon dinamikus DNS-t használok.)

Szóval már másodszor tabasztalom, hogy a cron egyszerűen megáll és nem fut le. Ilyenkor csak a reboot segít. Ha cront-t újraindítom, akkor a következő pár percre újra jó, de megint megáll.
Mi lehet a baj? Valaki találkozott már hasonlóval?
Lehetséges, hogy ez nem a Linux hanem a VPS üzemeltető hibája?

Linux host 4.9.0-6-amd64 #1 SMP Debian 4.9.82-1+deb9u3 (2018-03-02) x86_64 GNU/Linux
- terhelés nincs
- lemezterület van

üdv: redman

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ő.

Maga a cron processz áll le, eltűnik?

Ez jó kérdés, nem tudom, reprodukálni meg egyelőre nem tudom.
De a futtatandó script nem fut le az biztos

http://www.redphoto.hu

Próbáltad másik scripttel?
--
eutlantis

Szerintem nincs semmi különös a scriptben:


#!/bin/sh

iptables -F
iptables -t nat -F
iptables -X

IPTABLES=iptables

for i in $( iptables -t nat --line-numbers -L | grep ^[0-9] | awk '{ print $1 }' | tac ); do iptables -t nat -D PREROUTING $i; done
for i in $( iptables -t nat --line-numbers -L | grep ^[0-9] | awk '{ print $1 }' | tac ); do iptables -t nat -D POSTROUTING $i; done

HOMENET=`ping -c1 -t1 -W0 example.dyndns.com 2>&1 | tr -d '():' | awk '/^PING/{print $3}'`

echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --dport 9000 -j DNAT --to-destination $HOMENET:9000
iptables -t nat -A PREROUTING -p udp --dport 9000 -j DNAT --to-destination $HOMENET:9000

iptables -t nat -A PREROUTING -p tcp --dport 9001 -j DNAT --to-destination $HOMENET:9001
iptables -t nat -A PREROUTING -p udp --dport 9001 -j DNAT --to-destination $HOMENET:9001

iptables -t nat -A POSTROUTING -j MASQUERADE

DATE=`date '+%Y-%m-%d %H:%M:%S'`

echo ${DATE} >> /var/log/iptables_update.log

http://www.redphoto.hu

Nem tudom kipróbálni, meg őszintén szólva most kedvem sincs:-) De tegyél egy echo >> ..log -ot a script elejére is.

--
eutlantis

Azért azt a két utolsó sort nyugodtan össze lehetne vonni:

date '+%...' >> logfile

formában :-)
De ha valamiért nem akarod, akkor az echo után a változóhivatkozást mindenképp rakd idézőjelek közé, mert a date format-sztringje miatt *garantáltan* van benne szóköz. Márpedig a változóhivatkozásokat pont azért írjuk idézőjelek között, hogy mindig pontosan azt kapjuk, ami benne van. (Ne zavarjon meg, hogy a jelenlegi formájában a shell és az echo együttműködése folytán épp pont azt kapod; helyette szokd meg, hogy majdnem mindig macskakörmök közé teszed, kivéve, ha pont nem akarod pont ugyanazt kapni. Hint: ha a dátum és idő adatok közé nem szóközt, hanem tabulátort írnál a format sztringben, már hibás lenne a kódod.)
/OT

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

Javasolnám az iptables-save/iptables-restore páros használatát, szerintem sokkal-sokkal egyszerűbb lesz az életed meg a scripted, hiszen csak a (nat tábla) prerouting-ban akarsz matatni, azt meg sokkal egyszerűbb akár a mentett fájl átpimpelésével (sed a barátod), akár "template" alapján új fájl (csak a nat táblára) létrehozásával és visszatöltésével megoldani.

De ha ezt nem szeretnéd, legalább a grep ... | awk ... párost vond össze :-)

Már csak azért is jobb lenne egy ilyen irány, mert a jól bevált gyakorlattal erősen szembe megy a tűzfalszabályok teljes kipucolása és egyenkénti visszapimpelése.

[Feliratkozás]

En csinalnek vmi vpn-t otthonrol a szerver fele (openvpn) es elfelejtenem ezt a bessszkriptes baszkodast. :)

Jogos, csak nem akartam egyelőre sok energiát beletenni. Lehet, hogy nem is ez lesz a végleges dolog.

http://www.redphoto.hu

Megint megállt, de a kommentek alapján elláttam a script elejét is loggal.
Szóval a cron lefut, de a script nem ér a végére.


Portforward script started 2018-12-19 10:12:01
/home/admin/portfw.sh: 30: /home/admin/portfw.sh: Cannot fork


free
total used free shared buff/cache available
Mem: 1015720 872628 66208 3120 76884 31704
Swap: 1048572 566996 481576


# ps -eLf | wc -l
4996

Szóval valami elfogy, de nem tudom mi.
Most néztem meg, ha ezt írom:

# ps ax | grep portf

Akkor nagyon sok process van (kb 30 PgUp). Nem hal meg?
Valamiért nem lép ki a script?

http://www.redphoto.hu

Nem a cronnal van a problemad.

Nezd meg mi indit olyasn gecisok process-t/thread-et es gyepald ki.
Valamint ellenorizd az ulimit-edet.

Azaz a scripted nem fut végig, nem lép ki, a cron viszont indítja a következőket, és ezzel szépen eléri a futó processzek száma a megengedett maximumot, ami sacc/kb 5000 környékén lehet.

Faék egyszerűséggel pl. egy fájl létezését lehetne vizsgálni a script elején, ami ha ott van, akkor kilép a script, ha nincs, akkor létrehozza, a script legvégén meg törli. Plusz minden lépés előtt egy logbejegyzést írni, hogy hol tart a scripted - ekkor látni fogod, hogy meddig jut el, hol áll meg.