Я попробовал новое «издание» вашего предложения, и он работает красиво! Выглядит отлично. Но я пытаюсь заставить его работать в скрипте, и это кажется трудным ...
Вот хороший вывод при запуске как скрипт:
# ./getgputemp.sh
GPU 0: GeForce GTX 750 Ti GPU Current Temp: 49 C
GPU 1: GeForce GTX 750 GPU Current Temp: 39 C
GPU 2: GeForce GTX 750 GPU Current Temp: 42 C
GPU 3: GeForce GTX 750 Ti GPU Current Temp: 51 C
Пожалуйста, покажите мне как использовать его в моем скрипте. Я пробовал несколько способов и не могу заставить его работать. Мне нужно переменные, чтобы заставить скрипт работать. Мне нужно «str», которое является GPUnumber, и мне нужно «newstr», которое является температурой ». Любые идеи
Скрипт, как сейчас:
#!/bin/bash
# --- WatchdogGpuTemp.sh v.0.1.6 ---
# Author: DanHansen[at]Denmark
# Application: nvidia-smi
# Filename: watchdoggputemp.sh
# Logfile: watchdoggputemp.log
# Message file for status warning: watchdoggputempwarning.txt
# Message file for status critical: watchdoggputempcritical.txt
# Work directory: /home/username/shellscripts/
# Log directory: /home/username/logs/
# Message directory: /home/username/shellscripts/messages/
#
# --- WatchdogGpuTemp.sh v.0.1.6 ---
echo "JOB RUN AT $(date)"
echo "======================================="
echo ''
echo 'CPU Warning Limit set to => '$1
echo 'CPU Shutdown Limit set to => '$2
echo ''
echo ''
( nvidia-smi -L
nvidia-smi -q -d temperature | grep GPU
) |
awk '
/^GPU [0-9]:/ { gpu=0+$2; split($0,x,"("); gputype[gpu]=x[1]; }
/^GPU 00/ { split($2,x,":"); gpu=x[2]-1; }
/GPU Current Temp/{ temperature[gpu] = $5 " " $6; }
END { for(gpu=0;gpu<4;gpu++)
printf "%-30s GPU Current Temp: %s\n",gputype[gpu],temperature[gpu]
}'
echo ''
echo ''
for i in 1 2 3 4
do
str=$( YOUR STUFF AND GREP "GPU $i:) <------- SET "STR" TO GPU NUMBER
newstr=${str:49:2} <------------------------- SET "NEWSTR" TO TEMPERATURE
if [ ${newstr} -ge $1 ]
then
echo '====================================================================' >>/home/username/logs/watchdoggputemp.log
echo $(date) >>/home/username/logs/watchdoggputemp.log
echo '' >>/home/username/logs/watchdoggputemp.log
echo ' STATUS WARNING - NOTIFYING : TEMPERATURE GPU' $i 'EXCEEDED' $1 '=>' $newstr >>/home/username/logs/watchdoggputemp.log
echo ' ACTION : EMAIL SENT' >>/home/username/logs/watchdoggputemp.log
echo '' >>/home/username/logs/watchdoggputemp.log
echo '====================================================================' >>/home/username/logs/watchdoggputemp.log
# Status Warning Email Sending Code
# WatchdogGpuTemp Alert! Status Warning - Notifying!"
/usr/bin/msmtp -d --read-recipients </home/username/shellscripts/messages/watchdoggputempwarning.txt
echo 'Email Sent.....'
fi
if [ ${newstr} -ge $2 ]
then
echo '====================================================================' >>/home/username/logs/watchdoggputemp.log
echo $(date) >>/home/username/logs/watchdoggputemp.log
echo '' >>/home/username/logs/watchdoggputemp.log
echo ' STATUS CRITICAL - SHUTDOWN : TEMPERATURE GPU' $i 'EXCEEDED' $2 '=>' $newstr >>/home/username/logs/watchdoggputemp.log
echo ' ACTION : EMAIL SENT & SYSTEM SHUTDOWN' >>/home/username/logs/watchdoggputemp.log
echo '' >>/home/username/logs/watchdoggputemp.log
echo '====================================================================' >>/home/username/logs/watchdoggputemp.log
# Status Critical Email Sending Code:
# WatchdogGpuTemp Alert! Status Critical - Shutdown!"
/usr/bin/msmtp -d --read-recipients </home/username/shellscripts/messages/watchdoggputempcritical.txt
echo 'Email Sent.....'
echo 'System will now shutdown.....'
/sbin/shutdown -h now
exit
else
echo ' Temperature GPU '$i' OK at =>' $newstr
echo ''
fi
done
echo 'Status - All GPUs are within critical temperature limits'
echo ''