Jump to content

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


ddebny
 Share

Recommended Posts

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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
Link to comment
Share on other sites

@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 

[[email protected] ~]# cat /etc/init.d/abc
#!/bin/bash
echo "test" > /tmp/abc.log
echo "działa"
[[email protected] ~]# systemctl start abc
[[email protected] ~]# 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:

[[email protected] 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
Link to comment
Share on other sites

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?).

Link to comment
Share on other sites

  • 1 year later...
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.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...