Sziasztok!
Első ránézésre egy egyszerű dologra szeretnék épkézláb megoldást. A világ több pontján vannak elhelyezve szerverek. Ezeknek az órái a lehető legváltozatosabban vannak beállítva. Van aminek az órája UTC-hez van állítva, a másik gépen a helyi időhöz. Köztük van fizikai gép, VPS. Természetesen ezek is a lehető legvegyesebben. A gépek többségén Debian fut, de van 1-2 Ubuntu is. Az user választhat, hogy az alkalmazása melyik gépen induljon el, de az azon beállított időzített dolgok minden esetben a saját időzónája szerint kell indulnia cronból. A saját időzónáját az usernek tudnia kell állítani. Ezt ti hogy oldanátok meg úgy, hogy bármelyik gépen alkalmazva rendesen működjön?
- 2113 megtekintés
Hozzászólások
sub
- A hozzászóláshoz be kell jelentkezni
man 5 crontab
The cron daemon runs with a defined timezone. It currently does not support per-user timezones.
Az internetről letölthető fcron, ami úgy néz ki hogy tudja.
http://fcron.free.fr/doc/en/fcrontab.5.html
http://fcron.free.fr
- A hozzászóláshoz be kell jelentkezni
Hogy kerül a user crontabja a szerverre? Vagy ez is a feladat része? Én a crontab config konverzióra szavaznék, x forrásból át kell konvertálni helyi időre.
- A hozzászóláshoz be kell jelentkezni
Ott kellene kiindunia a dolognak, hogy az usernek már eleve a saját időzónájában lévő időt írja ki (legyen lehetősége ezt állítani). A cron meg alkalmazkodjon ahhoz. Természetesen jöhet más ötlet is, de sima apt-get-tel telepíthető legyen a fent említett rendszerekre.
-------------------
http://streamstat.hu/ - A legtöbb magyar rádió és TV egy helyen!
- A hozzászóláshoz be kell jelentkezni
Tehát ha jól értem akkor a cron-t nem a user szerkeszti crontab vagy hasonló programokkal, hanem valamilyen egyedi felületen kerül beállításra, és onnan "te írod be" crontab-ba.
Ha így van, akkor én simán a date paranccsal konvertálám az időt, és az így kapott időt írnám crontab-ba a megfelelő formátuman.
date -d '12:00:00 EDT'
TZ=PT date -d '12:00:00 EDT'
TZ=Europe/Moscow date -d '12:00:00 EDT'
TZ=Europe/Moscow date -d 'Wed 19:00:00 EDT'
TZ=Japan/Tokio date -d 'Wed 19:00:00 EDT' +"%M %H %m %u %Y"
- A hozzászóláshoz be kell jelentkezni
Ezzel az a baj, hogy 6 havonta simán el fog mászni az időpont (nyári időszámítás). Rosszabb esetben nem is azon napon, amikor az óra átállítás van nálunk (az USA-ban néhány héttel korábban állítják az órát). Ha automatikusan állítod, akkor meg Japánra kell figyelni, ahol nincs nyári időszámítás egyáltalán. Az időzónákkal és időkkel eszméletlen sok a szívás.
--
http://naszta.hu
- A hozzászóláshoz be kell jelentkezni
Hát akkor rendszeresen újragenerálod, mondjuk minden óra 2 perckor. A másik verzió hogy hősünk keres/ír egy olyan cron daemon-t, ami képes per user más időzóna szerinti crontab kezelésére, bár ez se olyan sárkányos dolog. Fut valami script/program/daemon/whatever, benne végtelen ciklus, annak az elején megnézni hogy hány másodperc van még a következő perc 1. másodpercéig és annyit sleep-el. Amikor pedig futni kell akkor adatbázisból lekéri a cronjob-okat, az időt konvertálja, és kell valami(ke)t futtatni akkor az(oka)t elindítja (nohup, akármi), aztán ciklus vége.
Mondjuk local crontab cache-sel lehet még cifrázni, illetve nem árt mellé egy watchdog ami eéindítja ha nem fut.
- A hozzászóláshoz be kell jelentkezni
Ez mindenképp iszonyat szívás lesz. Röviden összefoglalva: mindenkinek az az egyszerűbb ha minden ilyen jellegű idő UTC.
--
http://naszta.hu
- A hozzászóláshoz be kell jelentkezni
Ideiglenes megoldásként jelenleg minden UTC.
De lehet ezt tovább is fokozni, de az elején már nem mertem leírni. Az egyik alkalmazás egy Wine alatt futó SAM Broadcaster amit VNC-vel ér el az ügyfél. Tehát amikor belép az ügyfél programba akkor jó lenne ha a SAM Broadcastere az user saját idejét mutatná és ezen futnának időzített műsorok. UTC meg hosszútávon azért nem jó, mert az ügyfél nem fog folyton számolgatni. 1-2 időzítésnél még belefér, de ha több műsort kell időzítve betennie akkor az már nyűg.
-------------------
http://streamstat.hu/ - A legtöbb magyar rádió és TV egy helyen!
- A hozzászóláshoz be kell jelentkezni
Először a feladatot kellene tisztázi!
Az user ül valahol, és tartozik hozzá egy localtime.
Az egyik szerver is ül valahol, és tartozik hozzá egy másik localtime.
Kérdés: Az user melyik localtime szerint kíván futtatni?
- A hozzászóláshoz be kell jelentkezni
Minden esetben a sajátja szerint. Mintha eleve a sajét időzónájában lenne a szerver amin ügyködik.
-------------------
http://streamstat.hu/ - A legtöbb magyar rádió és TV egy helyen!
- A hozzászóláshoz be kell jelentkezni
Ezt én úgy csinálnám, hogy kiszámolom a nálam szükséges indítási időpont alapján az idők különbségét.
(timediff=destination_time-now)
Utána a célszerveren: at now+timediff command
- A hozzászóláshoz be kell jelentkezni
Talán egy saját külön crontab+crond kellene, UTC-re beállítva, valahogy úgy elrendezve, hogy a default-tal ne akadjon össze.
- A hozzászóláshoz be kell jelentkezni
sub (érdekes téma!)
- A hozzászóláshoz be kell jelentkezni
Puppet szerver a baratod. ;)
Naluk tobb mint 60 Raspberry pi futott kulonbozo helyeken Amcsiban es hasonlo gondjainak voltak.
Az RPi mogott csucsult egy gateway, ami a konfigtol fuggoen vagy az RPi-t hasznalta, mint gateway-t, vagy csak a web interface-hez kellett, mint gateway.
Az openvpn-n egy csomo alkalommal nem ment, ha a certifikacio ujjabb volt, mint az adott ido az RPi boxon.
En ezt ugy oldottam meg, miutan elegem lett a manualis reszelesbol hogy felhuztam minden gepre puppet-et es tavolrol ment a "tekeres". Tudom hogy ez nyug, mert egyreszt fel kell huzni egy puppet szervert, masreszt meg a klienseket is telepiteni kell + integralni a puppet szerverbe.
De ha az elso gondokon tul vagy, akkor utanna nagyon gyorsan fog menni az uj kliens integracio.
Megeri 1x szivni vele, mert atom konnyu lesz az eleted ezutan.
Amugy nekunk az ido tenyezon kivul, meg akadt mas gond is. Pl a raspberryken futott egy dhcp kliens, ami ellenorizte a net elerest.
Ez kb. a kliensek 20%-nal beragadt es kinyirta az RPi-t, mert a memoriat+cpu-t felzabalta a gepen.
Szoval nem csak az idot fogod tudni allitani a puppet-el kozpontilag, hanem barmit el tudsz kuldeni a gepnek tavolrol.
Uj csomag telepitese, vagy pl.: daemon fut-e (hasonlo funkcio mint a monit) es ez csak egy resze a puppet-nek.
Tudom hogy ez mind kivitelezheto cron-bol, de ha barmi valtozas van, akkor johet az ujjabb belepes + reszeles.
A puppet pont arrol szol, hogy az osszes szoporollert megszuntesse es kozpontilag tudj kontrollalni mindent egy geprol.
- A hozzászóláshoz be kell jelentkezni
Igazán szép az lenne, hogy ha bent vagyok rootként akkor a szerver UTC idejét mutatja.
De a 'su user' után a date már a user helyi idejét mutatná és az ott indított cronok is aszerint mennének.
A cron konvertálása oda-vissza csak félmegoldás (de a probléma nagy részét megoldaná), mert a fent említett Wine alatt futó SAM Broadcaster órájának is beállított időzóna szerint kellene mennie.
-------------------
http://streamstat.hu/ - A legtöbb magyar rádió és TV egy helyen!
- A hozzászóláshoz be kell jelentkezni
Ez nem tul bonyolult, nem erre gondoltal veletlenul? https://www.cyberciti.biz/faq/linux-unix-set-tz-environment-variable/
Szoval a user bash login scriptjet modositod.
De ahogy mondtam, ha fent van a Puppet, akkor tavolrol tudod ezt modositani es nem kell helyben killodni.
Masreszt a cron is "reszelheto" ezzel a modszerrel.
Erre itt van megoldas: http://unix.stackexchange.com/questions/27289/how-can-i-run-a-cron-comm…
"0 5 * * * . $HOME/.profile; /path/to/command/to/run"
Szoval a .profile-ban lesz az idozona beallitasod a futashoz es joccakat, ami igazodik az adott felhasznalohoz.
- A hozzászóláshoz be kell jelentkezni
Az első rész OK.
A másik megoldás rossz mert az időzóna beállítása még az UTC szerinti időkor állítódik be, tehát rosszkor fut le a script.
-------------------
http://streamstat.hu/ - A legtöbb magyar rádió és TV egy helyen!
- A hozzászóláshoz be kell jelentkezni
Ez igaz, akkor viszont marad a "reszeles" a felhasznalohoz.
Lehet hogy jobban jarsz egy fix global idovel, amit "tologatsz" ahogy a user megkivanja.
- A hozzászóláshoz be kell jelentkezni
Helyette lesz egy Puppet nevu szoporollered :)
- A hozzászóláshoz be kell jelentkezni
Ha nem cseszteti az ember a ruby on rails csomagokat, akkor nem tul sok gaz van vele.
En CentOS-en killodtam, de nagyon sokat. Ha megreccsen a rendszer, akkor ember legyen a talpan, aki visszahozza.
Debian-on nem volt meg gondom vele.
Amugy mar van Cisco es ESXi tamogatas is, de meg nagyon fos, csak beta verzio, legalabb is 1 eve meg csak az volt, amikor probaltam.
- A hozzászóláshoz be kell jelentkezni
Alapvetoen problemam van minden konfigmenedzsment eszkozzel, mivel "management of management" ami idorablo es ahelyett, hogy megoldana problemakat, hosszu tavon csak generalja azokat.
- A hozzászóláshoz be kell jelentkezni
+1
Pontosan ezt szeretném elkerülni. Minél egyszerűbb megoldás érdekel.
Ez pl. egy járható út lenne: TZ='Asia/Tokyo' majd utána elindul userként egy cron daemon ami tudja értelmezni a jelenlegi beállításokat. Ezzel a SAM Broadcaster is jó időt mutatna illetve a cronból futó dolgok is megfelelő időben indulnának.
-------------------
http://streamstat.hu/ - A legtöbb magyar rádió és TV egy helyen!
- A hozzászóláshoz be kell jelentkezni
Ez nezopont kerdese, kinek a pap, kinek a papne. :)
Azert 500+ szerver felett, szerintem halott dolog egy rendszert tisztan es atlathatoan kezelni kozponti menedzsment eszkozok nelkul.
- A hozzászóláshoz be kell jelentkezni
Ha hagyomanyos rendeszerekben gondolkozunk akkor mindenkepp. Ha meg nem akkor nem lehetetlen. De nem akarok offtopik lenni.
- A hozzászóláshoz be kell jelentkezni
Mik azok a feltetelek ami miatt mindenfelekeppen _pont azon_ a gepen kell elindulni az adott cron jobnak?
Nekem ugy tunik mindenfelekeppen egy egyszerubb - es menedzselhetobb - megoldast kell valasztani ehelyett a buveszkedes helyett.
- A hozzászóláshoz be kell jelentkezni
+1
Tódítanám egy kicsit. Mi a rossebnek cron.
- A hozzászóláshoz be kell jelentkezni
Időközben meglett a megoldás.
Minden usernél el van tárolva egy fájlba az általa használt időzóna. Ezen kívül van egy crontab fájlja is, de az nem fut cronból.
Írtam egy saját scriptet ami percenként cronból lefut. A script végigmegy minden useren, a script kiolvassa a fájlból az általa használt időzónát és a szerver által használt időt átszámolja az user által használtra. Ezután az átszámolt idővel értelmezi a crontab fájlt és ha olyan talál benne akkor elindítja azt.
-------------------
https://onlinestream.hu/ - A legtöbb magyar rádió és TV egy helyen!
- A hozzászóláshoz be kell jelentkezni
[Feliratkozás]
- A hozzászóláshoz be kell jelentkezni