17.12.2023, Vladimír Klaus, navštíveno 1262x

Systém
Windows

Pro potřeby rychlejšího a pohodlnějšího spouštění aplikací na serveru jsem se rozhodl celou věc zautomatizovat. Řekněme tedy že jsem přihlášen na Windows Serveru, řeším nějaké záležitosti, instaluji aktualizace apod. No a pak je třeba server restartovat. To může trvat různou dlouho dobu a já potřebuji, aby se poté téměř ihned spustily nějaké aplikace a třeba mi i o tom přišel e-mail. Je to zkrátka sada několika kroků, které se mi už nechtělo dělat ručně.

Jak na Windows Serveru spustit po restartu sadu aplikací včetně poslání e-mailové zprávy, obr. 1

Ale jsou tu i další požadavky. Potřebuji zajistit, aby byla každá z aplikací byla spuštěna jen jednou (dá se sice řešit při vývoji aplikace, ale pokud ji neprogramujete...). A protože se aplikace připojují k SQL Serveru, může být vhodné jejich start o chvilku odložit, protože ihned po restartu Windows Serveru nemusí SQL Server ještě úplně běžet a musel by se tak řešit další problém.

Spuštění aplikací

Tímto dávkovým souborem zajistím spuštění všech aplikací. Pokud ovšem daná aplikace běží, nebude se spouštět její další instance.

@echo off

SETLOCAL ENABLEDELAYEDEXPANSION

CALL :spustAplikaci Aplikace1.exe "c:\Program Files (x86)\AUDREY software\Aplikace1.exe"
CALL :spustAplikaci Aplikace2.exe "c:\Program Files (x86)\AUDREY software\Aplikace2.exe"

GOTO :konec

rem ------------------------------------------------------------------
rem Kontrola, zda je daná aplikace spuštěná, a pokud ne, spustí ji
rem Když je cesta v uvozovkách, musí se nejprve uvést prázdné uvozovky, což značí titulek okna
rem a až další parametr je chápán jako cesta k aplikaci
:spustAplikaci
echo Kontroluji/spoustim %1...
tasklist /FI "IMAGENAME eq %1" 2>NUL | find /I /N "%1">NUL
if "%ERRORLEVEL%"=="1" start "" ""%2""
rem ------------------------------------------------------------------

:konec
ENDLOCAL

rem Timto konci tato davka, ale pripadne pokracuje ta, ze ktere bych tuto volal
exit /b

Soubor uložte jako d:\spustit-aplikace.cmd.

Poslání e-mailu

Windows posílání e-mailu podporují pouze prostřednictvím Power Shellu. A PS skript není možné jednoduše spustit poklepáním na daný soubor *.ps1. Takže při ladění, ale i třeba později si musíte moci dávkovým souborem.

Nejprve si připravte PowerShell skript pro posílání e-mailu. Nevýhodou je, že s heslem musíte nakládat speciálním způsobem, a také že je uvedeno přímo v souboru.

$password = ConvertTo-SecureString "vaše-heslo" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential("odesílatel@nějaký-email.cz", $password)
Send-MailMessage -From "odesílatel@nějaký-email.cz" -To "příjemce@nějaký-email.cz"
-Subject "Aplikace byly spuštěny" -Body "Informace o tom, že byly aplikace spuštěny"
-SmtpServer "smtp.nějaký-server.com" -Port 25 -Credential $credential

Soubor uložte třeba do d:\poslat-email.ps1.

A pak si připravte dávkový soubor, ve kterém daný skript jednoduše a bez dalšího vyptávání spustíte.

@echo off
powershell -ExecutionPolicy Bypass -File "d:\poslat-email.ps1"

exit /b

Soubor uložte jako d:\poslat-email.cmd.

Souhrnný dávkový soubor

Ve výsledném souboru už jen postupně zavoláme oba dávkové soubory. Samozřejmě je třeba si uvědomit, že k odeslání e-mailu může dojít dřív, než se aplikace spustí. To už byste pak museli řešit další kontrolou založenou na nějakých dalších informacích. Zde je pouze důležité, aby oba volané dávkové soubory končily "exit /b", tedy aby předaly řízení zpět tomuto hlavnímu souboru.

@echo off

call d:\spustit-aplikace.cmd
call d:\poslat-email.cmd

pause

Soubor uložte jako d:\KOMPLETNI-spusteni.cmd.

Naplánování spuštění po restartu

K naplánování po restartu využijeme Plánovač úloh. Zde je důležité především vybrat, že chcete úlohu spustit bez ohledu na to, zda se uživatel přihlásí či nikoliv.

Jak na Windows Serveru spustit po restartu sadu aplikací včetně poslání e-mailové zprávy, obr. 2

Na další kartě vyberte, že má být spuštěna po startu a třeba s 5minutovým zpožděním.

Jak na Windows Serveru spustit po restartu sadu aplikací včetně poslání e-mailové zprávy, obr. 3

Následuje už jen výběr hlavního souboru, případně můžete (pro jistotu) nastavit ještě složku, ve které se má spustit. Sice všude uvádíte absolutní cesty, ale tímhle se nic nezkazí.

Jak na Windows Serveru spustit po restartu sadu aplikací včetně poslání e-mailové zprávy, obr. 4

A to je vše. Nezbývá, než ručně vyzkoušet d:\KOMPLETNI-spusteni.cmd, no a pak i třeba restarovat server. 😉