HEX
Server: Apache/2.2.34 (Unix) mod_fastcgi/mod_fastcgi-SNAP-0910052141
System: Linux Kou-Etsu-Dou 4.4.59+ #25556 SMP PREEMPT Thu Mar 4 18:03:46 CST 2021 x86_64
User: hosam (1026)
PHP: 7.2.29
Disabled: NONE
Upload Files
File: //usr/syno/sbin/syno_system_dump
#!/bin/bash
system_dump_script=syno_system_dump
log_file=/var/log/syno_sys_status.log
skip_log_file=/var/log/syno_sys_status_skip.log
dump_tmp_log_file=/var/log/dump_tmp_files.log
dump_running=/var/run/lock/syno_system_dump.lock
tehuti_low_mem_counter=/proc/driver/syno_tehuti_low_mem_counter

dump_D_process_call_stack()
{
	echo "[date] $(date)"
	echo [D state process call stack]
	PIDS=$(ps -e -T -o stat,tid | grep ^D | awk '{print $2}')
	for i in "${PIDS[@]}"; do
		echo "==========="
		cmd=$(tr -d '\0' <"/proc/${i}/cmdline")
		echo "PID: ${i}  cmdline:${cmd}"
		cat "/proc/${i}/stack"
	done
	echo ""
}

get_gateway()
{
	#    route -n |
	while IFS=$'\n' read line
	do
		echo "$line" | awk '{print $4}' |grep G > /dev/null
		if [ 0 -eq $? ]; then
			gateway=$(echo "$line" | awk '{print $2}')
			break
		fi
	done < <(route -n)
}

run_dump()
{
	echo "[date] $(date)"
	echo [ps result]
	ps axwf
	echo ""

	echo [vmstat result]
	cat /proc/vmstat
	echo ""

	echo [interrupts result]
	cat /proc/interrupts
	echo ""

	echo [slabinfo result]
	cat /proc/slabinfo
	echo ""

	echo [memoryinfo result]
	cat /proc/meminfo
	echo ""

	echo [zoneinfo result]
	cat /proc/zoneinfo
	echo ""

	echo [df result]
	df_result=$(df -x fuse.gvfsd-fuse -x cifs -x nfs4 -x nfs)
	echo "$df_result"
	echo ""

	echo [df inode result]
	df -x fuse.gvfsd-fuse -x cifs -x nfs4 -x nfs -i
	echo ""

	echo [top result]
	/usr/bin/top -b -n 2 -w 1024
	echo ""

	echo [route result]
	route -n
	echo ""

	echo [ping gateway]
	get_gateway
	if [ ! -z "$gateway" ]; then
		ping -c 3 "$gateway"
		echo ""
	fi

	echo [ifconfig result]
	ifconfig -a
	echo ""

	echo [/tmp big files]
	find /tmp -printf '%s %p\n' | sort -nr | head

	tmp_percentage=$(echo "$df_result" | grep "% /tmp" | awk '{print $5}' | sed 's/%//')
	if [ "$tmp_percentage" -ge 95 ]; then
		if [ ! -f /var/run/dump_tmp_time ] || find /var/run/dump_tmp_time -mmin +70 | grep -q dump_tmp_time; then
			touch /var/run/dump_tmp_time
			{
				echo "[date] $(date)"
				echo "[find /tmp]"
				find /tmp -printf '%s\t%p\n'
			} >> $dump_tmp_log_file
		fi
	fi

	if [ -e $tehuti_low_mem_counter ]; then
		echo [tehuti packet loss counter]
		cat $tehuti_low_mem_counter
		echo ""
	fi

	echo [HW monitor]
	cat /run/hwmon/*
	echo ""

	echo ""
	echo ""
}

skip()
{
	echo [date] "$(date)"
	echo [ps result]
	ps axwf
	echo
}

add_crontab()
{
	echo */3$'\t'*$'\t'*$'\t'*$'\t'*$'\t'root$'\t'/usr/syno/sbin/$system_dump_script >> /etc/crontab
	synoservice --reload crond
}

remove_crontab()
{
	sed -i /$system_dump_script/d /etc/crontab
	synoservice --reload crond
}

if [ "$1" = "enable" ]; then
	add_crontab
elif [ "$1" = "disable" ]; then
	remove_crontab
else
	if [ "$1" = "DState" ]; then
		DState="true"
	fi
	(
	if flock -n -x 9
	then
		if [ "$DState" = "true" ]; then
			dump_D_process_call_stack >> $log_file
		else
			run_dump >> $log_file
		fi
	else
		skip >> $skip_log_file
	fi
	) 9>$dump_running
fi