Zrobiłem małą aplikację narzędziową, C
która monitoruje udev
zdarzenia 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 htop
pewnym 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ć, powermonitor
jest plikiem wykonywalnym, a nie skryptem.
powermonitor
; poszukaj innych plików w nim zawartych.Odpowiedzi:
Pliki w tym pliku
/etc/init.d
nie 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życiukillall
), aby zatrzymać.init
wywoła skrypt startowy z jednym argumentem, słowemstart
,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.d
katalogu 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ć
systemd
zamiastsysvinit
, 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.źródło