░▒▓████████████████████████████████▓▒░ ░▒▓█ ▓▒░ ░▒▓█ ~ S W A M P ~ ▓▒░ ░▒▓█ ▓▒░ ░▒▓████████████████████████████████▓▒░
pplmvsvm
LOCATION:
/opt/microsoft/dependency-agent/bin
☗ ROOT
↻ REFRESH
✎ CARVE FLESH
EDITING: microsoft-dependency-agent-manager
#!/bin/sh # # ********************************************************************* # # Copyright (C) 2023 Microsoft. All rights reserved. # # This software is the intellectual property of Microsoft, Inc., # and contains confidential information and trade secrets of # Microsoft, Inc. It is protected by United States and # international copyright law and/or international treaties. # Unauthorized use, reproduction or distribution of the software, or # any portion of it, may result in severe civil and criminal # penalties, and will be prosecuted to the maximum extent possible # under the law. # # ********************************************************************* # AGENT_LOG_DIR="/var/opt/microsoft/dependency-agent/log" SERVICE_LOG="${AGENT_LOG_DIR}/service.log" DRIVER_FAULT="${AGENT_LOG_DIR}/driver-install-fault" ABNORMAL_END="${AGENT_LOG_DIR}/collector-abnormal-end" # must match collector/service/constants.h SERVICE_LOG_MAX=9 CONFIG_FILE="/etc/opt/microsoft/dependency-agent/config/MicrosoftDependencyAgent.properties" PIDFILE="/etc/opt/microsoft/dependency-agent/config/DA_PID" PYTHON_LOCATION="/opt/microsoft/dependency-agent/bin/python" read_pid() { if [ ! -f "$PIDFILE" ]; then echo 0 return fi pid=$(sed -n '/^[1-9][0-9]*$/p;q' "$PIDFILE" 2>/dev/null) if [ -n "$pid" ]; then echo $pid else echo 0 fi } write_pid_atomic() { ( local temp="${PIDFILE}.$$" trap "rm -f $temp" EXIT echo $$ > "$temp" ln "$temp" "$PIDFILE" 2> /dev/null ) [ "$$" = "$(read_pid)" ] } read_cmdline() { strings "/proc/$1/cmdline" 2> /dev/null | paste -s -d " " } run_or_exit() { if ! write_pid_atomic ; then DA_PID="$(read_pid)" CMD=$(read_cmdline "$DA_PID") MY_CMD=$(read_cmdline "$$") if [ "$CMD" = "$MY_CMD" ]; then log INFO "The Microsoft Dependency Agent service is already running (PID=$DA_PID)" exit 1 else log INFO "Found PID file: pid='$DA_PID' CMD='$CMD'" rm -f $PIDFILE if ! write_pid_atomic ; then DA_PID="$(read_pid)" log INFO "The Microsoft Dependency Agent service is already running (PID=$DA_PID)" exit 1 fi fi fi } find_python() { for p in python python2 python3 /usr/libexec/platform-python; do if command -v "${p}" ; then return 0 fi done return 1 } main() { run_or_exit log INFO "Microsoft Dependency Agent service running ($$)" trap cleanup EXIT QUIT TERM trap '' INT HUP RESTART_MAX=10 RESTART_WINDOW=60 RESTARTS_LEFT=$RESTART_MAX LAST_RESTART=0 if grep -iq '^collector.enable.cores[ ]*=[ ]*true[ ]*$' "$CONFIG_FILE"; then ulimit -c unlimited else ulimit -c 0 fi log INFO "Starting driver setup" /opt/microsoft/dependency-agent/lib/scripts/driver-setup >> "$SERVICE_LOG" 2>&1 & PID=$! wait $PID > /dev/null 2>&1 status=$? unset PID log INFO "Driver setup status=${status}" if [ "$status" -ne 0 ]; then vulnerabilities=`cat /sys/devices/system/cpu/vulnerabilities/spectre_v2 2>/dev/null || echo Unknown` echo "${status};`uname -srv 2>&1`;${vulnerabilities}" > "${DRIVER_FAULT}" tail "$SERVICE_LOG" >> "${DRIVER_FAULT}" 2>/dev/null fi log INFO "Checking if python is available on the system" if [ ! -x "${PYTHON_LOCATION}" ]; then # The test above detects two different conditions: # a) the directory entry does not exist # b) the symbolic link exists, but the file it references does not # The rm takes care of case b and the -f make case a a silent NOP. rm -f "${PYTHON_LOCATION}" # symbolic link to handle # a) cross-file systems # b) the target being removed, forcing a new search the next time if ! python_new=`find_python`; then log INFO 'python is required and was not found.' else ln -s $python_new ${PYTHON_LOCATION} fi fi while [ -x /opt/microsoft/dependency-agent/bin/microsoft-dependency-agent ]; do roll_service_logs /bin/rm -f /var/opt/microsoft/dependency-agent/storage/*.?b > /dev/null 2>&1 NOW=`date +%s` log DEBUG "Time since the last restart: "`expr $NOW - $LAST_RESTART` if [ `expr $NOW - $LAST_RESTART` -gt $RESTART_WINDOW ]; then RESTARTS_LEFT=$RESTART_MAX fi if [ $RESTARTS_LEFT -eq 0 ]; then exit 1 fi RESTARTS_LEFT=`expr $RESTARTS_LEFT - 1` LAST_RESTART=$NOW log INFO "Starting the Dependency Agent ($RESTARTS_LEFT restarts remain)" /opt/microsoft/dependency-agent/bin/microsoft-dependency-agent >> "$SERVICE_LOG" 2>&1 & PID=$! log DEBUG "Dependency Agent started: pid=$PID" wait $PID > /dev/null 2>&1 # On clean exit, SIGHUP, SIGINT, SIGKILL, or SIGTERM, don't restart it. SIGNAL=$? unset PID if [ $SIGNAL -eq 0 -o $SIGNAL -eq 129 -o $SIGNAL -eq 130 -o $SIGNAL -eq 137 -o $SIGNAL -eq 143 ]; then log INFO "Child exited with "`exit_desc $SIGNAL` exit fi log WARN "Child died with "`exit_desc $SIGNAL` echo "Linux;$SIGNAL;" > $ABNORMAL_END sleep 2 done } cleanup() { trap '' INT QUIT HUP TERM log DEBUG "Shutting down" if [ -n "$PID" ]; then log DEBUG "Killing child process: pid=$PID (SIGTERM)" kill $PID NEEDS_KILL=1 for i in 1 2 3 4 5 6 7 8 9 10; do if kill -0 $PID > /dev/null 2>&1; then log DEBUG "still waiting" sleep 1 else unset NEEDS_KILL fi done if [ -n "$NEEDS_KILL" ]; then log DEBUG "Killing child process: pid=$PID (SIGKILL)" kill -9 $PID > /dev/null 2>&1 fi fi rm -f $PIDFILE exit } log() { level=$1 shift if [ "$level" != "DEBUG" ]; then time=`date +'%F %T.%N' | cut -c-23` echo "${time}-{$level}-$*" >> "$SERVICE_LOG" fi } exit_desc() { signal=$1 if [ $signal -gt 128 ]; then echo "signal "`expr $signal - 128` else echo "exit code $signal" fi } roll_service_logs() { if [ -r "$SERVICE_LOG" ]; then # Roll the logs # Remove the oldest log file rm -f "${SERVICE_LOG}.${SERVICE_LOG_MAX}" >/dev/null 2>&1 # Roll all but the most recent log FROM=`expr ${SERVICE_LOG_MAX} - 1` while [ $FROM -gt 0 ]; do TO=`expr ${FROM} + 1` mv -f "${SERVICE_LOG}.${FROM}" "${SERVICE_LOG}.${TO}" >/dev/null 2>&1 FROM=`expr ${FROM} - 1` done # Roll the most recent log mv -f "${SERVICE_LOG}" "${SERVICE_LOG}.1" >/dev/null 2>&1 fi } main
CANCEL
Name
Type
Size
Modified
Actions
↩ ..
DIR
—
—
📄 microsoft-dependency-agent
?
2 MB
2023-11-01 09:12
EDIT
📄 microsoft-dependency-agent-manager
?
6 KB
2023-11-01 09:12
EDIT
📄 python
?
7.6 MB
2026-06-19 12:46
EDIT