67 lines
1.4 KiB
Bash
67 lines
1.4 KiB
Bash
#!/bin/sh
|
|||
|
|
|
||
|
|
# Start all init scripts in /etc/init.d
|
||
|
|
# executing them in numerical order with parallelization where safe.
|
||
|
|
|
||
|
|
# Services that must run sequentially (have dependencies)
|
||
|
|
SEQUENTIAL="S00fix-os S09wifi-enable S18udev S45network S48avahi-daemon S63body-board-power S54modules"
|
||
|
|
|
||
|
|
# Track background processes
|
||
|
|
PIDS=""
|
||
|
|
|
||
|
|
# Function to wait for background processes
|
||
|
|
wait_for_background() {
|
||
|
|
for pid in $PIDS; do
|
||
|
|
wait $pid 2>/dev/null
|
||
|
|
done
|
||
|
|
PIDS=""
|
||
|
|
}
|
||
|
|
|
||
|
|
for i in /etc/init.d/S??* ;do
|
||
|
|
# Ignore dangling symlinks (if any).
|
||
|
|
[ ! -f "$i" ] && continue
|
||
|
|
|
||
|
|
# Extract script name for dependency checking
|
||
|
|
SCRIPT_NAME=$(basename "$i")
|
||
|
|
|
||
|
|
# Check if this script must run sequentially
|
||
|
|
SEQUENTIAL_RUN=0
|
||
|
|
for seq in $SEQUENTIAL; do
|
||
|
|
if [ "$SCRIPT_NAME" = "$seq" ]; then
|
||
|
|
SEQUENTIAL_RUN=1
|
||
|
|
break
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
# Wait for background processes before running sequential scripts
|
||
|
|
if [ "$SEQUENTIAL_RUN" = "1" ]; then
|
||
|
|
wait_for_background
|
||
|
|
fi
|
||
|
|
|
||
|
|
case "$i" in
|
||
|
|
*.sh)
|
||
|
|
# Source shell script for speed.
|
||
|
|
(
|
||
|
|
trap - INT QUIT TSTP
|
||
|
|
set start
|
||
|
|
. $i
|
||
|
|
)
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
# No sh extension, so fork subprocess.
|
||
|
|
if [ "$SEQUENTIAL_RUN" = "1" ]; then
|
||
|
|
# Run sequentially
|
||
|
|
$i start
|
||
|
|
else
|
||
|
|
# Run in background
|
||
|
|
$i start &
|
||
|
|
PIDS="$PIDS $!"
|
||
|
|
fi
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
# Wait for any remaining background processes
|
||
|
|
wait_for_background
|
||
|
|
|