Jump to content

Žebříček

Populární obsah

Showing content with the highest reputation on 09/11/23 in all areas

  1. Spouštění programu jako service Obsah: Úvod Co potřebujeme Příprava programu Zprovoznení service 1. Úvod Ahoj, jednak pro sebe, ale jednak i pro ostatní zde přikládám návod jak spouštět program jako linux service. Co tím získáme? Zcela jednoduše - kontrolu nad programem, kdy se má spouštět, zda pokud spadne tak zda se má spustit znovu, poběží i po odhlášení z ssh apod. Proč service? Protože spousta lidí na serverech spouští programy klasicky a přidává znak "&" aby to běželo na pozadí. Jenže jedinej základní způsob jak ho vypnout je killnout proces nebo restart serveru. Pokud spadne, je potřeba ho manuálně spustit. Proč obtížnost 3 z 5? Nebudu vysvětlovat základy linuxu, pouze funkcionalitu. 2. Co potřebujeme Budeme potřebovat jakýkoliv linux, já osobně tento proces aplikuji na CentOS, každopádně vsadím se, že tento postup funguje pro jakoukoliv distribuci. sudo oprávnění Ujasnění v jaké složce pracujeme, já budu vše dělat ve složce /home/centos, každopádně je potřeba si toto případně změnit podle svého úsudku 3. Příprava programu Program budeme spouštět pomocí start.sh, který si vytvoříme: #! /bin/bash echo "Starting start.sh script..." cd /home/centos mkdir -p logs # Define the log file original_file="log" # Get the current timestamp in a specific format (e.g., YYYY-MM-DD_HH-MM-SS) timestamp=$(date +"%Y-%d-%m_%H-%M-%S") # Define the new file name with the timestamp new_file="${original_file%}_${timestamp}" # Rename the file mv "$original_file" ./logs/"$new_file" echo "Starting service at time: $timestamp" >> log echo "Running Program..." >> log ./RunMyProgram >> log 2>&1 Výše uvedený program vytvoří složku logs, pokud neexistuje (mkdir -p logs) Nastaví proměnnou original_file na název souboru kam budeme ukládát logy Nastaveí timestamp na aktuální datum a čas nastaveí new_file na kombinaci výše uvedených proměnných Přesune stávající log do složky logs a změní jeho název na log_datum_a_čas vypíše echo do nového logu Spustí náš program a jeho log bude ukládat do složky log Nyní je potřeba nastavit pro usera oprávnění script spouštět: chmod u+x start.sh Tento script můžete otestovat tím že si ho jen spustíte. Výsledek je, že při každém spuštění přesune původní log do archivu, udělá nový log a spustí program Dále je potřeba udělat service file, který bude systém používat jako config pro spouštění. Název bude myapp.service [Unit] Description=My app [Service] ExecStart=/home/centos/start.sh User=centos RestartSec=30 [Install] WantedBy=multi-user.target Description: defacto název service, který se pak bude zobrazovat ExecStart: To je nejdůležitější část magie, cesta musí poukazovat na to, co chceme spouštět. V našem případě absolutní cesta k start.sh User: user pod kterým se program spouští RestartSec: Pokud program spadne, tak po jak dlouhé době se má znovu spustit. WantedBy: Je v tom hlubší význa fungování service linuxu a dalších složitostí. Bez tohoto řádku vám jednoduše nepůjde spustit program při rebootu. V tomto config souboru se nastavuje hromada dalších věcí, toto je nejzákladnější způsob. Dá se nastavit po jak dlohé době od rebootu se má zapnout apod. Více nastavení si můžete dohledat. 4. Zprovoznení service Aby nám service fungovala, musíme poukázat kde má systém hledat náš config myapp.service. Uděláme proto symbolickej link do složky, kde linux běžně hledá service: ln -s /home/centos/myapp.service /etc/systemd/system/myapp.service Tímto jsme vytvořili symbolickej link ve složce /etc/systemd/system, kde linux standardně hledá service. Aby to fungovalo bez rebootu, musíme říct linxu, že došlo ke změnám a přenačíst složku: sudo systemctl daemon-reload A povolit service (jinak se nebude spouštět při startu systému) sudo systemctl enable myapp Nyní můžeme service zapnout: sudo systemctl start myapp Zda service funguje zjistíme pomocí: sudo systemctl status myapp Service se dá samozřejmě i vypnout sudo systemctl stop myapp S tímto nastavení se bude service spouštět při rebootu. Pokud chceme se nemá zapníat při rebootu stačí ji dát disable sudo systemctl disable myapp A to je vše!
    1 point
×
×
  • Create New...