Fedora - jak dodać własny skrypt do autostartu?


(Lpa) #1

Przygotowałem listę komend, które wpisuje w linii komend i w ten sposób startuje mój server.

Czy może mi ktoś podpowiedzieć jak zapakować je do skryptu który by je wszystkie wykonywał jako root przed włączeniem się maszyny?? Słyszałem co nieco o init.d... Podobno tamte skrypty wykonywane są z poziomu roota to było by super. tylko jak zapakować je do pliku i tam umieścić by wykonywały się przy każdym uruchomieniu maszyny.

Bardzo proszę o szybka pomoc. :frowning:


(roobal) #2

Nie wiem jak to wygląda w Fedorze, bo z niej praktycznie nigdy nie korzystałem. Tak skrypt możesz dodać do skryptów startowych, np. do wspomnianego init. Jak pisałem nie wiem jak to się robi w Fedorze, więc musisz poszukać na necie ale musisz skopiować swój skrypt do /etc/init.d/ i żeby wykonywał się automatycznie podczas startu trzeba mu nadać odpowiednie priorytety, z tego co znalazłem na szybko na necie w Fedorze jest jakieś chkconfig ale możesz też spróbować przy pomocy sysv-conf-rc.

Jeśli skrypt ma być wykonywany co jakiś czas, np. raz w tygodniu, co 10 minut lub inaczej to poczytaj sobie na temat Cron.

Pozdrawiam!


(Lpa) #3

oooo :o dzięki serdecznie za szybką odpowiedź :slight_smile: na innych forach czekam cały dzień na odpowiedź a tu proszę.

tak wygląda mój skrypt:

!/bin/bash

export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server

export ORACLE_SID=XE

export PATH=$PATH:$ORACLE_HOME/bin

lsnrctl start

cd '/home/lpa/Desktop/liferay-portal-5.2.3/tomcat-6.0.18/bin/'

./setenv.sh

./startup.sh

jednak nie wiem czy wybrałem dobry interpreter.

Chciałbym go otworzyć wpisując w linii komend:

./skrypt.sh

ale coś jest nie tak i wyrzuca taki komunikat:

-bash: ./skrypt.sh: /bin/bash^M: bad interpreter: No such file or directory


(roobal) #4

spróbuj w skrypcie zamiast ./setenv.sh i ./startup.sh dać:

sh setenv.sh

sh startup.sh

lub

/bin/bash setenv.sh

/bin/bash startup.sh

Pozdrawiam!


(etam) #5

Nie wiem jak na Fedorze, ale na openSUSE jest plik /etc/init.d/boot.local, który służy właśnie do tego, żeby wpisać jakieś własne rzeczy.

Pisałeś to na windowsie? Tak czy inaczej potraktuj ten plik komendą dos2unix.


(Lpa) #6

Niestety nic z tego za każdym razem przy próbie

./skrypt.sh

wyrzuca błąd:

-bash: ./skrypt.sh: /bin/sh^M: bad interpreter: No such file or directory

lub

-bash: ./skrypt.sh: /bin/bash^M: bad interpreter: No such file or directory

czy ktoś ma pomysł jak to rozwiazac??

próbowałem yum install (sh lub bash) ale odpowiedź brzmi zawsze tak samo

[root@localhost Desktop]# yum install sh

Loaded plugins: presto, refresh-packagekit

Setting up Install Process

No package sh available.

Nothing to do

próbowałem tez wywoływać ręcznie

sh skrypt.sh

bash skrypt.sh

ale większość linii konczy się:

command not found

(skrypt wygląda jak wyżej) prosze o pomoc


(etam) #7

Po pierwsze ja nadal uważam, że na końcu pierwszej linijki masz dosowy znak końca linii (stąd to "^M") i że powinieneś potraktować swój skrypt komendą dos2unix.

Po drugie "command not found" to nie jest cały komunikat. Jakiej komendy nie może znaleźć?

Nie wierzę, żeby nie było basha. Przecież w coś te komendy musisz klepać. Wpisz sobie komendę "rpm -q -f $(which bash) -i -l" i zobaczysz, że bash jest.

Edit: Ad "Po drugie": Jeżeli masz pustą linię zakończoną dosowym znakiem końca linii, to rzeczywiście wychodzi samo "command not found", co tylko potwierdza moją tezę wynikającą z "Po pierwsze".


(molexor) #8

NIe może zanaleźć interpretera bo masz tam dodatkowy znak . Tak jak kolega pisał zmień znak końca wiersza i ewentualnie kodowanie. Pisz pod linuksem , albo używaj np notepada++.

do dodawania własnych sdkryptów służy chyba plik /etc/rc.local - skrypty wykonują się po wszystkich innych


(Lpa) #9

Rzeczywiście mieliście rację. Swoją drogą to świetna komenda dos2unix :smiley: bardzo dziękuję teraz skrypt śmiga aż miło. Tylko jeszcze jak go wrzucić przy autostarcie??

Tak czy inaczej już teraz bardzo dziękuję za pomoc.


(nintyfan) #10
  1. Wrzucasz go do /etc/init.d

  2. Dodajesz dowiązania w interesującym katalogu, np. rc.5(czy coś w tym stylu)

  3. Zmieniasz nazwę dowiązania na Knajwyższy_numer_np_większy_od_100Nazwa_usługi

  4. Wpisujesz chkconfig Nazwa_usługi on

  5. Uruchamiasz ponownie system


(molexor) #11

Prościej do rc.local dopisać :wink: ,

ale wtedy nie będziesz miał kontroli nad initlevelami


(Lpa) #12

Ok bardzo dziękuję za pomoc już wiem wszystko. Pozdrawiam serdecznie :slight_smile:

P.S.

Przepraszam ale w chkconfig nie przyjmuje mojej usługi. Czy ten skrypt musi mieć jakieś specjale cechy??

Próbowałem dodać przez chkconfig --add skrypt.sh

dostałem odpowiedź: service skrypt.sh does not support chkconfig

Musi byc pewnie napisany w konwencji podobnej do innych.

Musi mieć funkcje start i stop jeszcze jakieś cechy??

Proszę o potwierdzenie lub zaprzeczenie mojej tezy.

Czy mógłby ktoś to sprawdzić w miarę możliwości? Przypomnę że pytam o fedore lub linuxa gdzie zachowuje się to podobnie.


(etam) #13

Nie wiem jak w Fedorze, ale w openSUSE jest plik /etc/init.d/skeleton, który jest gotowym szablonem do tworzenia takich skryptów.

Zgodnie z LSB http://refspecs.linux-foundation.org/LS ... ptact.html

Oczywiście, to że np. force-reload musi być, wcale nie oznacza, że musi coś innego od restart.