Skocz do zawartości

/etc/init.d Podczas Boot Nie Działa


ddebny

Rekomendowane odpowiedzi

W /etc/inid.d dodałem skrypt test

​Następnie sprawdziłem runlevel i działam na N3

​tak więc to /etc/rc.3 dodałem symlink do /etc/init.d/test

​Zrobiłem oczywiście chmod +x dla /etc/inid.d/test

​Po restarcie komputera skrypt nie działa. Nie mam pojęcia dlaczego.

​Pracuję na Fedora 21

​Czy wszystko zrobiłem poprawnie? Skrypt wymaga sudo, gdy odpalam go ręcznie.

Odnośnik do komentarza
Udostępnij na innych stronach

Czy wszystko zrobiłem poprawnie? Skrypt wymaga sudo, gdy odpalam go ręcznie.

Tu może być problem. Upewnij się, że ścieżki, w których uruchamiany program coś zapisuje mają uprawnienia do zapisu. Też sobie kiedyś dodałem skrypt zmieniający pliki w /etc i nie działał. Przerobiłem go na zmienianie plików w /tmp i było w porządku.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie wiem czemu nikt o tym nie mówi, ale od jakiegoś już czasu domyślnym sposobem na zarządzanie usługami w Fedorze jest Systemd. Odpowiada on za uruchamianie, wyłączanie i generalne zarządzanie usługami systemowymi.  Sposób, który @ddebny wykorzystujesz jest przestarzały i nie powinien już być wykorzystywany. Jednak systemd jest kompatybilne wstecz, wiec na upartego możesz to zrobić "starym" ( depracated ) sposobem. W samej Fedorze znajdziesz więcej informacji na ten temat: cat /etc/init.d/README. Tyle w kwest teorii.

 

Dodanie skryptu do systemd metodą sysvinit:

root# touch /etc/init.d/test                                                     # tworzymy plik - skrypt
root# printf '#!/bin/bash\necho "Systemd uruchomil skrypt!"' > /etc/init.d/test  # dodajemy zawartość
root# chmod +x /etc/init.d/test                                                  # nadajemy !!przykładowe!! prawa
root# systemctl daemon-reload                                                    # każemy systemd przeładować konfigurację
root# systemctl status test.service                                              # sprawdzamy czy systemd widzi plik

 Loaded: loaded (/etc/rc.d/init.d/test)                                          # loaded oznacza, że usługa została wykryta

root# systemctl start test.service                                               # jeżeli systemd widzi usługę nie pozostaje nic jak ją uruchomić 
root# systemctl status test.service                                              # ... oraz sprawdzić jej wyjście

 test.service - (null)
   Loaded: loaded (/etc/rc.d/init.d/test)
   Active: active (exited) since Sun 2016-02-07 11:31:55 CET; 4s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 29004 ExecStart=/etc/rc.d/init.d/test start (code=exited, status=0/SUCCESS)

Feb 07 11:31:55 pc2.home systemd[1]: Starting (null)...
Feb 07 11:31:55 pc2.home test[29004]: Systemd uruchomil skrypt!                  # jak widać standardowe wyjście skryptu jest widoczne w logach systemd
Feb 07 11:31:55 pc2.home systemd[1]: Started (null).


root# systemctl enable test.service                                              # włączamy uruchamianie usługi wraz ze startem systemu
                                                                                   (patrz post niżej) 

Jeżeli skrypt dalej nie będzie działać to znaczy, że może być on blokowany przez coś innego w systemie np. SELinux, firewall, lub nawet sudo.
W tym wypadku pozostaje debugowanie. Można to zrobić na kilka sposobów w zależności od użytego języka, ale to już inna bajka.
Jeżeli twój skrypt nie zwraca żadnych informacji debugujących(chociaż kody wyjścia), tzn., że jest źle napisany.

  • Upvote 1
Odnośnik do komentarza
Udostępnij na innych stronach

@Miszcz co do meritum masz rację, ale w Fedorze 21 - do obecnych wydań zresztą - jeszcze powinny chyba mimo wszystko działać skrypty z init.d.

Ale mam pytanie czy to co napisałeś działa u Ciebie? Bo u mnie 

[root@localhost ~]# cat /etc/init.d/abc
#!/bin/bash
echo "test" > /tmp/abc.log
echo "działa"
[root@localhost ~]# systemctl start abc
[root@localhost ~]# systemctl status abc
● abc.service - (null)
   Loaded: loaded (/etc/rc.d/init.d/abc)
   Active: active (exited) since nie 2016-02-07 18:57:09 CET; 4s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1792 ExecStart=/etc/rc.d/init.d/abc start (code=exited, status=0/SUCCESS)
 
lut 07 18:57:09 localhost.localdomain systemd[1]: Starting (null)...
lut 07 18:57:09 localhost.localdomain abc[1792]: działa
lut 07 18:57:09 localhost.localdomain systemd[1]: Started (null).
Za to enable:

[root@localhost init.d]# systemctl enable abc
abc.service is not a native service, redirecting to systemd-sysv-install
Executing /usr/lib/systemd/systemd-sysv-install enable abc
usługa abc nie obsługuje chkconfig
[EDIT]

Już sobie przypomniałem. I to być może jest rozwiązanie problemu @ddebny.

Do skryptu trzeba dodać linijkę w stylu

# chkconfig: - 345 90
pomimo, że to komentarz, to chkconfig z tego korzysta do określenia na jakim runlevel ma wykonać skrypt.

Poza tym linki w /etc/rcX.d powinny zaczynać się od S (startowe) lub od K (wykonywane na zamknięcie) a potem powinna następować liczba która decyduje o kolejności wykonywania.

Stare dzieje, wieki już tego nie robiłem.

  • Upvote 1
Odnośnik do komentarza
Udostępnij na innych stronach

Haha, oj powiem szczerze, że tylko enable nie chciało mi się już sprawdzić, ale tak podejrzewałem, że może być.  :)

 

(btw. dlaczego w codeboxie ignorowane jest formatowanie użytkownika, np. przekreślenie tekstu, pogrubienie?).

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 year later...

Cześć,

Mam ten sam problem - startowanie sieci mi nie działa. A sposób opisany przez WalDo u mnie zadziałał tylko przy pierwszym restarcie.

Znalazłem coś takiego https://www.tecmint.com/create-new-service-units-in-systemd/

Będę sprawdzał w niedziele u żony w pracy czy się Neostrada podniesie po restarcie.

Odnośnik do komentarza
Udostępnij na innych stronach

Dnia 9.06.2017 o 23:32, morg napisał:

Cześć,

Mam ten sam problem - startowanie sieci mi nie działa. A sposób opisany przez WalDo u mnie zadziałał tylko przy pierwszym restarcie.

Znalazłem coś takiego https://www.tecmint.com/create-new-service-units-in-systemd/

Będę sprawdzał w niedziele u żony w pracy czy się Neostrada podniesie po restarcie.

To dobry tekst. W szczególności ten fragment:

Create-New-Service-Units-in-CentOS-7.png

Nic trudnego, prawda? :) Jest to dokładnie wszystko, co trzeba wpisać do pliku service.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...