Mój skompilowany program jest uruchamiany przez init.d, ale w końcu zostaje zabity


1

Zrobiłem małą aplikację narzędziową, Cktóra monitoruje udevzdarzenia zasilania i automatycznie dostosowuje jasność podświetlenia laptopa. (Używam Ubuntu 15.04)

Uruchomiłem następujące polecenia i działa dobrze przy starcie.

$ sudo cp powermonitor /etc/init.d/powermonitor
$ sudo chmod +x /etc/init.d/powermonitor
$ sudo update-rc.d powermonitor defaults

Jednak po htoppewnym czasie monitorowania zużycia procesora zauważyłem, że już go nie ma. Program nie przyjmuje argumentów wiersza poleceń, choć wygląda na to, że Linux próbuje go uruchomić:

/etc/init.d/powermonitor start

Czy jest coś, co powinienem zrobić, aby proces nadal działał?

EDYCJA: Aby wyjaśnić, powermonitorjest plikiem wykonywalnym, a nie skryptem.


1
Zwykle zamiast tego plik init.d / * jest skryptem powłoki, który następnie wywołuje powermonitor; poszukaj innych plików w nim zawartych.
thrig

Twój program prawdopodobnie ulega awarii. Powinno to wygenerować wpis dziennika, ale nie wiem, gdzie systemd go umieszcza.
Gilles

To samo dzieje się dla mnie i nie, program nie ulega awarii. Po prostu nie mogę znaleźć żadnego dowodu, że to się w ogóle zaczęło. Sam skrypt jest uruchomiony.
Owl

Odpowiedzi:


2

Pliki w tym pliku /etc/init.dnie powinny być skompilowanymi plikami wykonywalnymi. Być może umieściłeś skompilowany plik wykonywalny gdzie indziej /usr/local/bin; wtedy napisać skrypt startowy w /etc/init.d, który wie, jak uruchomić i zatrzymać skompilowany program. Często jest to tak proste, jak uruchomienie go w tle, aby rozpocząć, i zabicie jego PID (lub nazwy pliku wykonywalnego przy użyciu killall), aby zatrzymać. initwywoła skrypt startowy z jednym argumentem, słowem start, stop, restart& c .; skrypt ma obowiązek wiedzieć, jak uruchomić samą usługę.

Aby uzyskać krótkie wprowadzenie, spróbuj tutaj . W twoim /etc/init.dkatalogu może znajdować się przykładowy szkielet , który możesz zmienić w zależności od przypadku.

Na marginesie, jaką dystrybucję prowadzisz? Wiele nowoczesnych dystrybucje teraz uruchomić systemdzamiast sysvinit, który używa (domyślnie) plik jednostkową deklaratywny zamiast skryptu init; Pliki jednostek IMO są łatwiejsze do zapisania. systemd zapewnia tryb zgodności sysvinit, więc możliwe, że uruchamiasz go sam. Jeśli tak, polecam napisanie pliku jednostkowego zamiast skryptu.


Używam Ubuntu 15.04. Dzięki za odpowiedzi; Rzucę okiem na link i niektóre skrypty. Jeśli to pomoże, oznaczę to poprawnie!
armadadrive

Myślę, że skompilowany program się zawiesił, ale zaznaczam to jako poprawne, ponieważ nauczyło mnie czegoś o tym, jak należy używać /init.d. Kwestia awarii jest odrębna od tego pytania pod wieloma względami.
armadadrive
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.