Zdravím,
dělám pod Linuxem v C++ TCP/IP server a momentálně se snažím vyřešit nějakým stylem update. Přesněji zkouším "self-update". Klientem pošlu na server příkaz k updatu. Ten se pak podívá na FTP a zjístí, zda je nová verze. Pokud ano, tak stáhne tar archív. Teď jsem to chtěl řešit tak, že spustím bash skript, ukončím server (skript ověří, zda je server ukončen), rozbalím a spustím server. Problém je ve spuštění skriptu. Zkoušel jsem system(), popen() i exec..(), dostal jsem se na místo, kdy proces serveru zmizí z ps ax, ale pořád naslouchá na portu. To pak způsobí chybu při znovuspuštění serveru skriptem - následně po skončení tohoto update procesu už na portu nic nenaslouchá. Máte nějaké návhy, doporučení k tomu? Předem díky.
Fórum › C / C++
Spuštění jiného procesu - Linux
To KIIV : Každé spojení s klientem uzavírám, momentálně se mi podařilo uzavřít i naslouchací socket. Problém zůstává v tom, že když něco spustim přes system (přidám do příkazu &), tak se proces zcela neukončí. Potřebuji nějakým stylem spustit jiný proces tak, aby se můj zcela ukončil.
dr
Jestli jsem to pochopil správně, tak server stáhne archiv, spustí skript; skript zabije server, rozbalí archiv a znovu spustí server:
+-----------+------------+------------+
| KLIENT | SERVER | SKRIPT |
+-----------+------------+------------+
| --------> | xxxxxxxxxx |
| update | xxxxxxxxxx |
+-----------+------------+------------+
| | stáhne | xxxxxxxxxx |
| | archiv | xxxxxxxxxx |
+-----------+------------+------------+
| | -----------> |
| | spustí |
+-----------+------------+------------+
| | <----------- |
| | zabije |
+-----------+------------+------------+
| | xxxxxxxxxx | rozbalí |
| | xxxxxxxxxx | archiv |
+-----------+------------+------------+
| | <----------- |
| | spustí |
+-----------+------------+------------+
| <--------- | xxxxxxxxxx |
| odpoví | xxxxxxxxxx |
+-----------+------------+------------+
Je to tak?
A co takhle:
+-----------+------------+------------------+
| KLIENT | SERVER | FORK SERVERU |
+-----------+------------+------------------+
| --------> | xxxxxxxxxxxxxxxx |
| update | xxxxxxxxxxxxxxxx |
+-----------+------------+------------------+
| | stáhne | xxxxxxxxxxxxxxxx |
| | archiv | xxxxxxxxxxxxxxxx |
+-----------+------------+------------------+
| | -----------> |
| | fork() |
+-----------+------------+------------------+
| | wait() | exec("tar -xzf |
| | | archiv.tar.gz") |
+-----------+------------+------------------+
| <--------- | xxxxxxxxxxxxxxxx |
| odpoví | xxxxxxxxxxxxxxxx |
+-----------+------------+------------------+
Pokud je ve spouštěcí rutině serveru nějaký kód, který načítá obsah složky, bude potřeba tento kód oddělit a poté, co skončí potomek, kód znovu zavolat.
Zjistit počet nových příspěvků
Přidej příspěvek
Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 10 hostů
Podobná vlákna
C# Odchycení události jiného procesu — založil General
Spuštění jiného programu — založil Milan.009
Spusteni jineho *.py v pygame — založil crook
Spuštění jiného *.jar souboru — založil MpPozor
Spuštění jiného programu po kliku na tlačítko — založil Minatory
Moderátoři diskuze