Colo: Add running process cleanup to delete logic (#6281)
This commit is contained in:
@ -14,11 +14,92 @@ if [ -f "$SOLANA_LOCK_FILE" ]; then
|
|||||||
flock -x -n 9 || exit 1
|
flock -x -n 9 || exit 1
|
||||||
. "$SOLANA_LOCK_FILE"
|
. "$SOLANA_LOCK_FILE"
|
||||||
if [ "\$SOLANA_LOCK_USER" = "\$SOLANA_USER" ]; then
|
if [ "\$SOLANA_LOCK_USER" = "\$SOLANA_USER" ]; then
|
||||||
|
# Begin running process cleanup
|
||||||
|
CLEANUP_PID=\$$
|
||||||
|
CLEANUP_PIDS=()
|
||||||
|
CLEANUP_PPIDS=()
|
||||||
|
get_pids() {
|
||||||
|
CLEANUP_PIDS=()
|
||||||
|
CLEANUP_PPIDS=()
|
||||||
|
declare line maybe_ppid maybe_pid
|
||||||
|
while read line; do
|
||||||
|
read maybe_ppid maybe_pid _ _ _ _ _ _ _ _ <<<"\$line"
|
||||||
|
CLEANUP_PIDS+=( \$maybe_pid )
|
||||||
|
CLEANUP_PPIDS+=( \$maybe_ppid )
|
||||||
|
done < <(ps jxh | sort -rn -k2,2)
|
||||||
|
}
|
||||||
|
|
||||||
|
CLEANUP_PROC_CHAINS=()
|
||||||
|
resolve_chains() {
|
||||||
|
CLEANUP_PROC_CHAINS=()
|
||||||
|
declare i pid ppid handled n
|
||||||
|
for i in "\${!CLEANUP_PIDS[@]}"; do
|
||||||
|
pid=\${CLEANUP_PIDS[\$i]}
|
||||||
|
ppid=\${CLEANUP_PPIDS[\$i]}
|
||||||
|
handled=false
|
||||||
|
|
||||||
|
for j in "\${!CLEANUP_PROC_CHAINS[@]}"; do
|
||||||
|
if grep -q "^\${ppid}\\\\b" <<<"\${CLEANUP_PROC_CHAINS[\$j]}"; then
|
||||||
|
CLEANUP_PROC_CHAINS[\$j]="\$pid \${CLEANUP_PROC_CHAINS[\$j]}"
|
||||||
|
handled=true
|
||||||
|
break
|
||||||
|
elif grep -q "\\\\b\${pid}\\$" <<<"\${CLEANUP_PROC_CHAINS[\$j]}"; then
|
||||||
|
CLEANUP_PROC_CHAINS[\$j]+=" \$ppid"
|
||||||
|
handled=true
|
||||||
|
# Don't break, we may be the parent of may proc chains
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if ! \$handled; then
|
||||||
|
n=\${#CLEANUP_PROC_CHAINS[@]}
|
||||||
|
CLEANUP_PROC_CHAINS[\$n]="\$pid \$ppid"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Kill screen sessions
|
||||||
|
while read SID; do
|
||||||
|
screen -S "\$SID" -X quit
|
||||||
|
done < <(screen -wipe 2>&1 | sed -e 's/^\s\+\([^[:space:]]\+\)\s.*/\1/;t;d')
|
||||||
|
|
||||||
|
# Kill tmux sessions
|
||||||
|
tmux kill-server &> /dev/null
|
||||||
|
|
||||||
|
# Kill other processes
|
||||||
|
for SIG in INT TERM KILL; do
|
||||||
|
get_pids
|
||||||
|
if [[ \${#CLEANUP_PIDS[@]} -eq 0 ]]; then
|
||||||
|
break
|
||||||
|
else
|
||||||
|
resolve_chains
|
||||||
|
for p in "\${CLEANUP_PROC_CHAINS[@]}"; do
|
||||||
|
if ! grep -q "\b\$CLEANUP_PID\b" <<<"\$p"; then
|
||||||
|
read -a TO_KILL <<<"\$p"
|
||||||
|
N=\${#TO_KILL[@]}
|
||||||
|
ROOT_PPID="\${TO_KILL[\$((N-1))]}"
|
||||||
|
if [[ 1 -ne \$ROOT_PPID ]]; then
|
||||||
|
LAST_PID_IDX=\$((N-2))
|
||||||
|
for I in \$(seq 0 \$LAST_PID_IDX); do
|
||||||
|
pid="\${TO_KILL[\$I]}"
|
||||||
|
kill -\$SIG \$pid &>/dev/null
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
get_pids
|
||||||
|
if [[ \${#CLEANUP_PIDS[@]} -gt 0 ]]; then
|
||||||
|
sleep 5
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
# End running process cleanup
|
||||||
|
|
||||||
|
# Begin filesystem cleanup
|
||||||
git clean -qxdff
|
git clean -qxdff
|
||||||
rm -f /solana-scratch/* /solana-scratch/.[^.]*
|
rm -f /solana-scratch/* /solana-scratch/.[^.]*
|
||||||
cat > "\${HOME}/.ssh/authorized_keys" <<EOAK
|
cat > "\${HOME}/.ssh/authorized_keys" <<EOAK
|
||||||
$("$__colo_here"/add-datacenter-solana-user-authorized_keys.sh 2> /dev/null)
|
$("$__colo_here"/add-datacenter-solana-user-authorized_keys.sh 2> /dev/null)
|
||||||
EOAK
|
EOAK
|
||||||
|
# End filesystem cleanup
|
||||||
RC=true
|
RC=true
|
||||||
fi
|
fi
|
||||||
9>&-
|
9>&-
|
||||||
|
Reference in New Issue
Block a user