olen tehnyt c :lla linuxissa serveriprosessin, joka on jatkuvasti käynnissä ja kuuntelee sokettia. Haluaisin, että prosessini ottaa mysql tietokantaan yhteyden esim. joka
torstai kello 14.00 ja tallentaa sinne tietoa. Noita ajastettuja tapahtumia pitäisi tehdä enemmänkin.
Kuinka tuo tiettynä ajanhetkenä tapahtuva toiminta olisi helpointa toteuttaa? Löytyykö jotain alarm() tapaista funktiota, johon voihin asettaa päivämäärän/kellonajan noiden sekunttien tapaan jotain alarm() ottaa vastaan?
torstai kello 14.00 ja tallentaa sinne tietoa. Noita ajastettuja tapahtumia pitäisi tehdä enemmänkin.
Kuinka tuo tiettynä ajanhetkenä tapahtuva toiminta olisi helpointa toteuttaa? Löytyykö jotain alarm() tapaista funktiota, johon voihin asettaa päivämäärän/kellonajan noiden sekunttien tapaan jotain alarm() ottaa vastaan?
Vastaukset 6
Vanhimmat
Setitimer() on varmaan funktio, jota etsit. Tolla tosin ei voi päivämäärää laittaa suoraan mutta voit tehdä SIGALRM-käsittelijän, joka tarkastaa ajan yms.
Toinen tapa, joka tuli mieleen on käyttää cronia lähettämään signaali (vaikka SIGUSR1 tolle prosessille kun aika menee umpeen).
>Toinen tapa, joka tuli mieleen on käyttää cronia >lähettämään signaali (vaikka SIGUSR1 tolle >prosessille kun aika menee umpeen).
mitens tuon lähetys onnistuu komentoriviltä/skriptistä?
Tietysti ohjelmalla kill. Esim. "kill -USR1 prosessin_pid". C/C :lla kikkaillessa voit käyttää systeemikutsua kill (katso "man 2 kill").
vielä jatkokysymys. prosessithan käynnistyy aina vaihtelevalla pidillä. miten saan tuon skriptin löytämään prosessin nimeltään xxx pidin?
Se prosessi voi kirjoittaa sen PIDn vaikka levylle (esim. /var/run/xyz.pid) käynnistettäessä. Toinen tapa varmaan on käyttää pgreppiä (tai ps -ef | grep ..).
kiitoksia kaikille vastanneille.. nyt selviän eteenpäin.