Jak wymusić dłuższy `reboot` w Busybox v1.13.3?


0

reboot wydaje się, że system plików root jest tylko do odczytu prawie natychmiast, powodując warunki wyścigu z jednym z moich procesów, który próbuje zapisać ustawienia do pliku podczas jego około 1-2 sekundowego wyłączenia.

Rezultatem sporadycznym jest pusty plik ustawień, ponieważ jest on obcięty, ale nie jest wypełniany w odpowiednim czasie.

Tworzę obejście tego procesu, ale nadal chciałbym dodać trochę rozsądku do reboot dowództwo.

Teraz myślałem o aliasingu reboot do reboot -d 5 dla jedynego konta w systemie, aby nikt nie przypadkowo nie wykonał natychmiastowego zamknięcia -d wprowadza opóźnienie:

[hostname /root]# reboot --help 2>&1 | grep Delay
        -d      Delay interval for rebooting

Jednak BusyBox v1.13.3 wydaje się nie obsługiwać alias w jego sh realizacja:

[hostname /root]# alias reboot=reboot -d 5
-sh alias: not found

Jakie mam opcje?

Odpowiedzi:


0

The alias odpowiednik funkcji można osiągnąć za pomocą czegoś takiego w twoim .bashrc:

reboot() {
   cmd=/path/to/reboot
   $cmd -d 5
}

Jeśli to nie jest praktyczne, czy możesz zmodyfikować aplet ponownego uruchamiania BB, aby mieć domyślne opóźnienie, lub zmienić jego nazwę i zastąpić skryptem przekazującym dalej?


„fraid not - (a) okazuje się, że opcja opóźnienia i tak jest bezużyteczna - aplet po prostu to robi sleep przed wywołaniem Linuksa reboot (i nie wykonuje żadnej własnej sygnalizacji), i (b) nie bylibyśmy w stanie dystrybuować aktualizacji do apletu za pomocą naszego oprogramowania. Podejście do funkcji może jednak działać ... hmm.
Lightness Races in Orbit

Właściwie myślę, że (a) oznacza, że ​​to całe pytanie jest teraz dyskusyjne. :(
Lightness Races in Orbit

Co powiesz na to, aby skrypt lub funkcja opakowująca wykonała dowolną niestandardową sygnalizację wstępnego wyłączenia do dowolnych procesów, na które chcesz, poczekaj na (zakończenie | określone opóźnienie | ukończenie z określonym limitem czasu), a następnie przekaż na busybox reboot?
boycy

Tak, przypuszczam, że wstrzyknięcie trochę sygnału do konkretnych procesów, o które się martwię, zrobi to. Nie czułbym się komfortowo wszystko ja sam, czyniąc to mniej obejściowym, niż początkowo miałem nadzieję. Oddam to; dzięki :)
Lightness Races in Orbit

A co z dzwonieniem? kill(-1, SIGTERM) ( <signal.h> ) przed opóźnieniem; jeśli jest uruchomiony jako root, daje wszystkim procesom ' SIGTERM 'heads up przed apletem restartu SIGTERM - sleep(1) - SIGKILL cykl
boycy
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.