Jump to content
Sign in to follow this  
ddebny

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

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.

Share this post


Link to post
Share on other sites

/etc/rc.3? Jeśli w ogóle, to /etc/rc.d/rc3.d

Sprawdziłeś jak wygląda link? Lepiej robić na "prawdziwych" katalogach niż na linkach do nich a /etc/init.d to symboliczny link do /etc/rc.d/init.d

Share this post


Link to post
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.

Share this post


Link to post
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

Share this post


Link to post
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 

[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

Share this post


Link to post
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?).

Share this post


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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...