Jak używać
- Wpisz nazwę usługi, polecenie z pełną ścieżką i katalog roboczy.
- Ustaw użytkownika, restart i ewentualne zmienne środowiskowe.
- Opcjonalnie dodaj podstawowe utwardzanie albo harmonogram (OnCalendar), aby utworzyć timer.
- Skopiuj wygenerowane pliki albo wklej komendy instalacji do powłoki roota na serwerze.
Opis opcji
- Type
- simple pasuje do programów działających na pierwszym planie; oneshot pasuje do skryptów uruchamianych raz, np. zadań cyklicznych.
- Restart
- Po błędzie restartuje usługę, gdy zakończy się błędem lub się zawiesi; Zawsze restartuje ją także po normalnym zakończeniu.
- OnCalendar
- Kiedy timer się uruchamia, np. daily albo *-*-* 03:00:00 dla 3:00 każdego dnia. Wyrażenia sprawdzisz poleceniem systemd-analyze calendar.
Przykład: nocne zadanie jako timer
Aby uruchamiać skrypt co noc o 3:00, ustaw Polecenie (ExecStart) na /usr/local/bin/backup.sh, nazwę usługi na backup, Type na oneshot i Restart na Nigdy, a następnie zaznacz „Uruchamiaj według harmonogramu (utwórz .timer)” i „Podstawowe utwardzanie”. Przy domyślnym użytkowniku i katalogu roboczym generator tworzy dwa pliki. backup.service:
[Unit]
Description=Nightly backup
[Service]
Type=oneshot
User=www-data
WorkingDirectory=/srv/myapp
ExecStart=/usr/local/bin/backup.sh
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=read-only
oraz backup.timer:
[Unit]
Description=Run backup on a schedule
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
Unit=backup.service
[Install]
WantedBy=timers.target
Gdy timer jest włączony, zmieniają się dwie rzeczy. Plik usługi traci sekcję [Install], ponieważ uruchamia ją timer, a polecenia instalacji włączają timer, a nie usługę:
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers backup.timer
journalctl -u backup.service -f
Type nie jest zmieniany automatycznie po zaznaczeniu opcji timera, więc dla zadań, które się kończą, wybierz oneshot samodzielnie. Usługa oneshot połączona z Restart Zawsze jest niepoprawna, więc generator pomija Restart i pokazuje ostrzeżenie.
Najczęściej zadawane pytania
Gdzie umieścić plik?
W /etc/systemd/system/. Potem uruchom systemctl daemon-reload i systemctl enable --now <nazwa>.service — wygenerowane komendy robią to wszystko.
Dlaczego usługa kończy się błędem „Executable path is not absolute”?
Starsze wersje systemd wymagają pełnej ścieżki do programu w ExecStart. Znajdziesz ją poleceniem which, np. which node.
Timer czy cron?
Timery zapisują logi w dzienniku, potrafią nadrobić uruchomienia pominięte, gdy serwer był wyłączony, i nigdy nie działają dwa razy naraz. Cron jest prostszy dla jednolinijkowców i nadal działa świetnie.
Prywatność
To narzędzie działa w całości w przeglądarce. Twoje pliki i tekst są przetwarzane na Twoim urządzeniu i nigdy nie trafiają na nasze serwery.