Как да автоматизираме WSL2 скрипт при стартиране на Windows (с изчакване)

Как да стартираме WSL2 скрипт на домашния или работния компютър, които иначе лесно забравяме. В моя случай проблемът беше следният: имам бекъп скрипт за отдалечени сървъри със сайтове, който се намира в моята WSL2 (Ubuntu) среда на адрес /home/fedia/scripts/backup_sync.sh. Тъй като компютърът ми с Windows 11 не работи постоянно, класическият cron в Linux не ми върши работа – ако машината е изключена в часа на задачата, бекъпът просто се пропуска.
Решението? Да накарам Windows сам да събужда WSL и да стартира скрипта малко след като се логна в системата. Но тук има уловка: ако скриптът тръгне веднага, има голям шанс мрежата или рутерът още да не са готови и бекъпът да се провали. Затова конфигурирах нещата с точно 15 минути отлагане.
Ето как го постигнах стъпка по стъпка, използвайки вградения Windows Task Scheduler (Планировчик на задачи).
📖Стъпка 1: Тестване на директната команда
Преди да премина към планировчика, трябваше да се уверя, че Windows може да извика Linux скрипта директно без грешки. Отворих PowerShell и тествах следната команда:
wsl -e /home/fedia/scripts/backup_sync.sh
Флагът -e указва на WSL да изпълни конкретния файл. Скриптът се задвижи веднага и направи бекъпа успешно. Щом тестът мина, беше време за автоматизацията.
Стъпка 2: Конфигуриране на Windows Task Scheduler
- Отворих Task Scheduler от старт менюто на Windows.

- В десния панел (Actions) избрах Create Task… (Създаване на задача), за да се отвори прозорецът с разширените настройки.

Раздел "General" (Общи)
- Зададох ясно име на задачата:
Server Backup. - В секцията за сигурност (Security options) избрах опцията Run whether user is logged on or not – това позволява на скрипта да се изпълнява изцяло на заден фон, без да ми изскачат досадни черни прозорци, докато работя.
- Сложих отметка на Run with highest privileges, за да подсигуря административни права при мрежовите заявки.

Раздел "Triggers" (Тригери)
Тук е разковничето за решаването на проблема с изключването на компютъра:
- Кликнах на New… и от падащото меню Begin the task избрах At log on (При влизане в системата). Така задачата се активира всеки път, когато пусна компютъра и се логна.
- В разширените настройки отдолу маркирах Delay task for: (Отлагане на задачата за) и въведох ръчно
15 minutes. Това дава предостатъчно време на Windows да зареди всички услуги, а на рутера – да вдигне интернет връзката.
Раздел "Actions" (Действия)
Тук указваме какво точно да се случи след тези 15 минути:
- Кликнах на New… с избрано действие Start a program.
- В полето Program/script написах просто:
wsl - В полето Add arguments (optional) добавих проверената команда:
-e /home/fedia/scripts/backup_sync.sh
Раздел "Settings" (Настройки)
За финал добавих още една застраховка. Настроих задачата така, че ако се провали (например в 15-ата минута интернетът все пак е дропнал), Windows да пробва отново след 5 минути (опцията If the task fails, restart every…).
Резултатът
След като запазих задачата, я тествах веднага с десен бутон -> Run от списъка в Task Scheduler Library. Всичко мина перфектно.
Сега вече няма нужда да го мисля на ръка или да се притеснявам, че съм забравил да пусна архивирането. Компютърът се грижи сам за всичко: пускам го, той изчаква кротко 15 минути да се "намести" системата, събужда WSL2 във фонов режим, скриптът си свършва работата и след това WSL се затваря, без да хаби излишна памет.
Ако и вие имате подобни скриптове, които искате да вървят на "полу-сървърни" машини, този подход с Task Scheduler и WSL2 е най-чистият и ресурсно ефективен начин!
Намерихте материала за полезен?
Съдържанието на itpraktika.com е безплатно и ще остане такова.
Ако статията ти е помогнала — можеш да подкрепиш сайта с малка доброволна сума.
Всяко дарение помага за поддръжката и развитието на портала.
