Debian: Jak uruchomić skrypt podczas uruchamiania bez konieczności pisania 30 linii skryptu powłoki?

20

Mam serwer Debian i po prostu muszę uruchomić skrypt podczas uruchamiania.

Przeczytałem to: https://www.debian-administration.org/article/28/Making_scripts_run_at_boot_time_with_Debian

Mam teraz: insserv: ostrzeżenie: skrypt „brakuje tagów i przesłonięć LSB

więc wygląda na to, że muszę teraz dodać:

### BEGIN INIT INFO
# Provides:          scriptname
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

Teraz wygląda to na szalone: ​​jak 30 linii skryptu, aby uruchomić program przy starcie.

Czy istnieje narzędzie, które pozwala to zrobić w prosty sposób?

pozdrowienia

Yarek
źródło
Co to za skrypt? Próbowałeś uruchomić go z /etc/rc.local? Możesz umieścić ścieżkę do skryptu w pliku rc.local, a zostanie ona wykonana w czasie rozruchu.
Diamant,
prosty skrypt, który uruchamia proces węzła, uruchamia php itp ...
yarek
Liczę 9 wierszy, a nie 30. I to są komentarze, a nie skrypt powłoki (a nie skrypt SSH).
wurtel
Są to nagłówki LSB (patrz wiki.debian.org/LSBInitScripts ), a płyta inicjująca skrypt inicjujący LSB znajduje się na północ od 70 linii (patrz rzeczy takie jak github.com/fhd/init-script-template/blob/master/template ). Jeśli chcesz, aby jedno polecenie uruchamiane ręcznie było obsługiwane przez komputer podczas rozruchu przez jakiś plik w / etc, wydaje się to dość skomplikowaną ceremonią!
Kristopolous

Odpowiedzi:

29

Jeśli twój skrypt jest „tylko skryptem” i nie uruchamia demona, rozważ użycie /etc/rc.local(wykonanego jako root) lub crontab(wykonanego jako użytkownik wybrany).

Dwa przykłady:

  • /etc/rc.local

    #!/bin/sh -e
    #(Multiple lines of comments removed.)
    /usr/local/bin/your-script.sh
    exit 0
    
  • crontab(edytowane na przykład przez crontab -e)

    #(Multiple lines of comments removed.)
    @reboot /usr/local/bin/your-script.sh
    

Edycja 1: Po prostu przeczytaj swój komentarz: Jeśli twój skrypt uruchamia demony, które powinny działać cały czas, odradzam używanie rc.locallub crontab, a zamiast tego napisanie odpowiedniego (lub wielu) init.dskryptów. W ten sposób ty / twój system jest w stanie czysto zrestartować / ponownie załadować / uruchomić / zatrzymać itd. Demony.

Edycja 2: Nazywasz to szalonym, ale LSB tagspodajesz pewną wartość: „Dokumentując zależności w czasie wykonywania dla skryptów init.d, można zweryfikować bieżącą kolejność rozruchu, zamówić rozruch przy użyciu tych zależności i uruchomić skrypty rozruchowe w równolegle, aby przyspieszyć proces uruchamiania. ” Aby uzyskać więcej informacji, odwiedź wiki Debiana .

(Nawiasem mówiąc: To ostrzeżenie, więc tak naprawdę to zależy od ciebie, jak i co z tym zrobić.)

gf_
źródło
Podoba mi się wersja crontab .. ale nie sądzę, że @reboot działa na Debianie!
yarek
@yarek: Działa, używając tego osobiście (w przypadku skryptów, które są tylko skryptami).
gf_
2
to działa, ale myślę, że jest to tylko dla użytkownika root, więc musisz to zrobić@reboot root /usr/local/bin/your-script.sh
Froggiz
btw mówiłem o debianie!
Froggiz,
Nadal jestem dość zdezorientowany: czy cron umożliwia uruchomienie anyskryptu po ponownym uruchomieniu serwera, nie otwierając sesji jako root.
yarek,
0

nadzór jest również opcją. Ponownie napiszesz niektóre wiersze, aby uruchomić pliki node.js i PHP, ale będzie ich mniej.

adamo
źródło
0

Możesz użyć do tego monitorowania , po prostu napisz definicję monitorowania , a uruchomią się dla ciebie demony. Ale dlaczego nie używasz poprawnie ze skryptami LSB? Nie jest tak trudno napisać (piszesz to tylko raz) i jest to najczystszy i najcenniejszy sposób na osiągnięcie tego.

Ondra Sniper Flidr
źródło