Przyglądałem się ostatnio projektom implementującym alternatywy dla naszych rc-scripts
i nasunęło mi się kilka pomysłów, które można ułożyć w logiczne etapy. Szczegóły poniżej.
Równoległe uruchamianie procesów
Pierwszym krokiem powinno być nauczenie naszych skryptów startowych bootowania równocześnie wszystkich procesów o równym priorytecie. Przez priorytet rozumiem kolejność bootowania, którą obsługuje chkconfig
(na tej podstawie nazywa symlinki w odpowiednich poziomach init
).
Najprościej rzecz ujmując, powinien uruchomić dla każdego z nich proces w tle i przed przejściem do procesów z wyższymi priorytetami poczekać, aż każdy z procesów potomnych się zakończy.
Do wyświetlania efektów działania procesów potomnych potrzebny byłby jakiś wrapper, który buforowałby wyjście z procesu tak długo, aż ten się zakończy bądź sforkuje w tło, a następnie wyświetlał całość (w przeciwnym wypadku wyniki działania poszczególnych initskryptów mieszałyby się między sobą).
Oznaczenie zależności pomiędzy procesami
Następnie konieczne byłoby wprowadzenie wzajemnych zależności pomiędzy initskryptami. Wystarczyłoby wprowadzić dwa dodatkowe słowa kluczowe do komentarzy w nagłówku plików: before:
i after:
, które oznaczałyby, że dany skrypt powinien zostać wykonany odpowiednio przed lub po innym skrypcie. W ten sposób na przykład dostarczany przez pakiet apache
skrypt httpd
mógłby otrzymać:
# after: mysql network pgsql
Oznaczałoby to, że powinien zostać wykonany dopiero po każdym z wymienionych tam skryptów (jeśli dany skrypt w ogóle istnieje i jest przypisany do aktualnego poziomu init
- w przeciwnym wypadku powinien zostać zignorowany).
Nowy chkconfig
Ostatnim etapem byłoby napisanie nowego programu chkconfig
, który zamiast wpisanych na sztywno w skrypty priorytetów, uwzględniałby wprowadzone w poprzednim kroku zależności. Na tej podstawie procesy byłyby sortowane i przyznawane byłyby im priorytety i stosowne linki dla poziomów uruchomienia.
Opcjonalnie, można napisać zupełnie niezależny od chkconfig
program, który będzie tylko aktualizował priorytety w nagłówkach plików startowych usług. Efekt końcowy będzie ten sam (choć kontrowersyjna może być modyfikacja samych skryptów - rpm
będzie je traktował tak, jakby zostały zmienione przez użytkownika).
Procesy wzajemnie niezależne otrzymywałyby ten sam priorytet, przez co uruchamiane byłyby jednocześnie. Zniknęłyby sytuacje, gdzie jeden skrypt czeka na zakończenie innego, zupełnie z nim nie powiązanego. Powinno to zaowocować sporym przyspieszeniem całości procesu podnoszenia systemu.