Nützliche selbstgestrickte Scripte für die Alltagsadministration
- heisenberg
- Beiträge: 3612
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Re: Nützliche selbstgestrickte Scripte für die Alltagsadministration
Ich habe eines zum Aufbau von SSH Tunneln, welches ich regelmässig nutze. Achtung "KnownHost" muss dazu unverschlüsselt seien.
ein weiteres zum auslesen, der Gültigkeit von Zertifikaten die übers System verteilt sind.
Ein weiteres für das automatische verschlüsselte Backups, beim Anschluss bestimmter USB Platten. Voraussetzung hier, Luks verschlüsselte USB Platten, die UDEV bekannt, sind so dass das Script beim Anschluss dieser automatisch Startet. Das Script Mountet dann die USB Platten, Entschlüsselt diese und Startet dann ein Backupscript. Das Backupscript wiederrum kann dann ein einzelnes Backup Starten oder wenn mehrere USB Platten angeschlossen wurden, die bekannt sind, diese dann automatisch synchronisieren.
Code: Alles auswählen
#!/bin/bash
# Function to display a list of known hosts
show_known_hosts() {
cut -f 1 -d ' ' <~/.ssh/known_hosts | sed -e 's/,.*//g' | uniq | grep -v "\[" | tr ' ' '\n' | grep -v "=" | sort
}
# Function to prompt for yes/no answers
ask_yes_no() {
local prompt="$1 (yes/no): "
read -p "$prompt" response
case "$response" in
[YyJj]) return 0 ;; # Yes
[Nn]) return 1 ;; # No
*) ask_yes_no "$prompt" ;; # Repeat prompt if the answer is not valid
esac
}
# Display the list of known hosts if the user chooses to
if ask_yes_no "Do you want to display the list of known hosts?"; then
show_known_hosts
fi
# Read connection details
read -p "Server hostname or IP address: " Server
read -p "Username: " User
read -p "Remote server source port: " sPort
read -p "Local port on your computer: " lPort
# Set up SSH tunnel and display message
if ssh -L ${lPort}:${Server}:${sPort} -D 1083 -p 1081 ${User}@localhost \
"while true; do echo -e \"Tunnel to ${Server}, local port ${lPort}\"; sleep 15; done"
then
echo "The SSH tunnel has been successfully established."
else
echo "ERROR: The SSH tunnel could not be established."
fi
ein weiteres zum auslesen, der Gültigkeit von Zertifikaten die übers System verteilt sind.
Code: Alles auswählen
#!/bin/bash
# Check if the required arguments are provided
if [ "$#" -ne 1 ]; then
script_name=$(basename "$0")
echo "Invalid number of arguments. Please use the command as follows:"
echo "Usage: $script_name <DIRECTORY>"
exit 1
fi
# Directory to search for certificates
search_directory="$1"
# Function to extract certificate information and check validity
extract_certificate_info() {
cert_file="$1"
# Extract certificate issuer
issuer=$(openssl x509 -noout -issuer -in "$cert_file" | cut -d '=' -f 2-)
# Extract certificate subject (domain)
subject=$(openssl x509 -noout -subject -in "$cert_file" | cut -d '=' -f 2-)
# Extract certificate serial number
serial=$(openssl x509 -noout -serial -in "$cert_file" | cut -d '=' -f 2)
# Extract certificate validity
validity=$(openssl x509 -noout -dates -in "$cert_file" | grep "notBefore\|notAfter")
not_after_date=$(echo "$validity" | grep "notAfter" | cut -d '=' -f 2)
unixtime=$(date +%s)
# Calculate the number of days until the expiration date
expired=$(date -d "${not_after_date}" +%s)
difference=$((expired - unixtime))
days=$((difference / 86400))
if [ "$days" -lt 0 ]; then
# The expiration date is in the past (Error)
color_start="\e[0;31m" # Red
color_end="\e[m"
color_status="Error"
elif [ "$days" -le 300 ]; then
# The expiration date is in less than or equal to 30 days (Warning)
color_start="\e[0;33m" # Yellow
color_end="\e[m"
color_status="Warning"
else
# The expiration date is in more than 30 days (Success)
color_start="\e[0;32m" # Green
color_end="\e[m"
color_status="Ok"
fi
echo "Certificate: $cert_file"
echo "Issuer: $issuer"
echo "Subject: $subject"
echo "Serial Number: $serial"
echo -e "Validity: ${color_start}$not_after_date${color_end} ($color_status, the expiration date is in more than 30 days)"
echo
}
# Find and process certificates in the directory
find "$search_directory" -type f -iname "*.crt" | while read cert_file; do
extract_certificate_info "$cert_file"
done
Ein weiteres für das automatische verschlüsselte Backups, beim Anschluss bestimmter USB Platten. Voraussetzung hier, Luks verschlüsselte USB Platten, die UDEV bekannt, sind so dass das Script beim Anschluss dieser automatisch Startet. Das Script Mountet dann die USB Platten, Entschlüsselt diese und Startet dann ein Backupscript. Das Backupscript wiederrum kann dann ein einzelnes Backup Starten oder wenn mehrere USB Platten angeschlossen wurden, die bekannt sind, diese dann automatisch synchronisieren.
Code: Alles auswählen
#!/bin/bash
# Export paths
export PATH=$PATH:/usr/bin:/usr/sbin:/bin:/sbin
# Set the DISPLAY variable for graphical applications
export DISPLAY=:0
# Set the keyfile path
keyfile=/mnt/usbstick/KeyFile.bin
# Check if USB auto-backup is already running
backup_is_running=/tmp/start_usb_auto_backup_is_running
if [ -f "$backup_is_running" ]; then
# If the script is already running, exit
exit 0
fi
su debian -c "touch $backup_is_running"
# Wait for 3 seconds for other devices
sleep 3
# Function to decrypt and mount a USB drive
decrypt_and_mount() {
local device=$1
local mapper_name="crypt_usb_$device"
local mount_point="/mnt/crypt_usb_$device"
# Check if the device is already decrypted and mounted
if [ -e "/dev/mapper/$mapper_name" ] && [ -e "$mount_point/Linux" ]; then
echo "Drive $device is already decrypted and mounted."
return
fi
# Decrypt and mount the USB drive
/usr/sbin/cryptsetup luksOpen "/dev/$device" "$mapper_name" --key-file "$keyfile" && \
/bin/systemd-mount "/dev/mapper/$mapper_name" "$mount_point/"
}
# Check the number of USB devices
usb_devices_count=$(lsusb | grep -c "152d")
# Decide if USB devices were found
if [ "$usb_devices_count" -gt 0 ]; then
# Find USB devices and call decrypt_and_mount for each
usb_devices=($(ls -l /dev/disk/by-id/usb* | awk '{print $NF}' | cut -c7-))
for device in "${usb_devices[@]}"; do
decrypt_and_mount "$device"
done
fi
# Call the user's backup script
su debian -c "/opt/autobackup/usb_auto_backup.sh &"
# Wait for the backup script
sleep 10
# Check if the backup script is still running; if not, unmount encrypted devices and exit the script
while true; do
if [ -f "$backup_is_running" ]; then
# If the backup is running, wait for 10 seconds and check again
sleep 10
else
# If the backup is not running, unmount the encrypted devices and exit the script
/opt/autobackup/umount_usb_auto_backup.sh
exit 0
fi
done
- heisenberg
- Beiträge: 3612
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Script: Load- und temperaturabhängige CPU-Frequenzsteuerung
Load- und temperaturabhängige CPU-Frequenzsteuerung
Ich habe mir hier mal ein Script geschrieben, das die CPU-Frequenz herunterregelt, wenn die Temperatur zu hoch ist. Solche Programme gibt es Einige. Ich habe mir das geschrieben, weil ich die Drosselung gerne nur dann hätte, wenn die CPU-Load ausreichend niedrig ist. D. h. die Überschreitung der Maximaltemperatur ist bei hoher Load für mich akzeptabel. Ich nehme dabei auch immer den höchsten Load-Wert aus dem Tripel 1/5/15-Minuten Load, damit sowohl auf kurzfristige Laststeigerungen schnell reagiert wird, als auch bei nur kurzfristigen Lastabfällen nicht sofort die Frequenz wieder herunter gedreht wird. Ich möchte also eine möglichst geringe Beeinträchtigung der Performance des Servers.
Ansonsten wird bei großen Unter- oder Überschreitungen der Temperatur mit größeren Frequenzsprüngen reagiert, um eine schnellere Wirkung zu erzielen. Mir ist im Übrigen auch klar, dass die CPU-Auslastung nicht der einzige Auslöser für eine hohe Load ist. Auch die Entscheidung einfach von allen Temperatursensoren immer den höchsten Temperaturwert zu nehmen, trifft üblicherweise auf den Prozessor-Sensor zu, muss es aber nicht unbedingt. Das ist nicht perfekt, passt aber für den vorliegenden Anwendungsfall.
Ein Gedanke, den ich am Anfang hatte, war noch der, ob das so gut ist, ständig an den Frequenzlimits rum zu drehen. Nachdem sich die aktuellen Taktfrequenzen der CPU-Cores aber sowieso ständig ändern (governor powersave), scheint mir dieses Bedenken unbegründet.
Auch scheint das Anliegen insgesamt widersprüchlich: Die Temperatur geht hoch, wenn die CPU-Last hoch geht und wenn die CPU Last hat, dann wird sie auch gebraucht. Da ergibt es ja keinen Sinn, gleichzeitig die Geschwindigkeit runter zu drehen. Faktisch bringt es aber doch etwas.
Beispiel der Logausgabe
So wirkt sich dass dann im Betrieb aus:
Ich habe mir hier mal ein Script geschrieben, das die CPU-Frequenz herunterregelt, wenn die Temperatur zu hoch ist. Solche Programme gibt es Einige. Ich habe mir das geschrieben, weil ich die Drosselung gerne nur dann hätte, wenn die CPU-Load ausreichend niedrig ist. D. h. die Überschreitung der Maximaltemperatur ist bei hoher Load für mich akzeptabel. Ich nehme dabei auch immer den höchsten Load-Wert aus dem Tripel 1/5/15-Minuten Load, damit sowohl auf kurzfristige Laststeigerungen schnell reagiert wird, als auch bei nur kurzfristigen Lastabfällen nicht sofort die Frequenz wieder herunter gedreht wird. Ich möchte also eine möglichst geringe Beeinträchtigung der Performance des Servers.
Ansonsten wird bei großen Unter- oder Überschreitungen der Temperatur mit größeren Frequenzsprüngen reagiert, um eine schnellere Wirkung zu erzielen. Mir ist im Übrigen auch klar, dass die CPU-Auslastung nicht der einzige Auslöser für eine hohe Load ist. Auch die Entscheidung einfach von allen Temperatursensoren immer den höchsten Temperaturwert zu nehmen, trifft üblicherweise auf den Prozessor-Sensor zu, muss es aber nicht unbedingt. Das ist nicht perfekt, passt aber für den vorliegenden Anwendungsfall.
Ein Gedanke, den ich am Anfang hatte, war noch der, ob das so gut ist, ständig an den Frequenzlimits rum zu drehen. Nachdem sich die aktuellen Taktfrequenzen der CPU-Cores aber sowieso ständig ändern (governor powersave), scheint mir dieses Bedenken unbegründet.
Auch scheint das Anliegen insgesamt widersprüchlich: Die Temperatur geht hoch, wenn die CPU-Last hoch geht und wenn die CPU Last hat, dann wird sie auch gebraucht. Da ergibt es ja keinen Sinn, gleichzeitig die Geschwindigkeit runter zu drehen. Faktisch bringt es aber doch etwas.
Code: Alles auswählen
#!/usr/bin/env ruby
# CPU Temperature/Load-dependent CPU-Frequency control
#
# Throttle CPU when temperature is too high, but only when cpu load is low.
#
# INSTALLATION
#
# install the following ruby gems
#
# gem install sys-cpu
# gem install awesome_print
# gem install find
#
# needs the following debian-packages
#
# cpufrequtils
#
# RULES (prio from high to low)
#
# if load_avg >=MAX_LOAD frequency to maximum
# if load_avg >=HOLD_LOAD no frequency reduction
# if temperature >= CRIT+10 frequenz minus 1500 (delta-2)
# if temperature >= CRIT+5 frequenz minus 500 (delta-1)
# if temperature >= CRIT frequenz minus 100 (delta-0)
# if temperature < CRIT-15 frequenz plus 1500 (delta-2)
# if temperature < CRIT-10 frequenz plus 500 (delta-1)
# if temperature < CRIT-5 frequenz plus 100 (delta-0)
#
require 'sys-cpu'
require 'awesome_print' # optional - maybe commented out
require 'find'
# global variables
$cpu_step_unit=1000 # units for changing the cpu frequency
$hysteresis_delay=5 # delay in seconds to wait for temperature change to happen
$max_load_allowed=10 # cpu load at which frequency will be set to max
$load_hold=8 # cpu load at which frequency will no longer be reduced
$temp_limit_upper=75 # temperature at which cpu will be throttled
$temp_limit_lower=$temp_limit_upper-5 # temperature at which cpu will be raised
$temp_limit_delta1=5 # temperature difference at which frequency change delta1 will be used
$temp_limit_delta2=10 # temperature difference at which frequency change delta2 will be used
$freq_change_delta0=100
$freq_change_delta1=500
$freq_change_delta2=1500
$temp_sensor_files=[] # temperature sensor files for this system (autodetect)
$core_count # number of available cpu cores (autodetect)
$cpu_freq_max # highest possible cpu frequency (autodetect)
$cpu_freq_min # lowest possible cpu frequency (autodetect)
$log_levels = {
7 => "DBG2",
6 => "DBG1",
5 => "INFO",
4 => "NOTE",
3 => "WARN",
2 => "ERRO",
1 => "CRIT",
0 => "NONE" }
$lrev = {
:DBG2 => 7,
:DBG1 => 6,
:INFO => 5,
:NOTE => 4,
:WARN => 3,
:ERRO => 2,
:CRIT => 1,
:NONE => 0 }
$log_level = $lrev[:INFO]
def log(level,text)
if level <= $log_level then
puts $log_levels[level] + " " + text
end
end
def lg_dbg2(text) log($lrev[:DBG2],text) end
def lg_dbg(text) log($lrev[:DBG1],text) end
def lg_info(text) log($lrev[:INFO],text) end
def lg_note(text) log($lrev[:NOTE],text) end
def lg_warn(text) log($lrev[:WARN],text) end
def lg_error(text) log($lrev[:ERRO],text) end
def lg_crit(text) log($lrev[:CRIT],text) end
def get_temp_sensors()
# find temperature sensor files of this system
Find.find("/sys") do |path|
if File.basename(path) == "temp" then
$temp_sensor_files.push(path)
end
end
end
def get_temperature()
# get maximum temperature of all found sensors
max_temp=0
$temp_sensor_files.each do |file|
temp = File.open(file).read.to_i/1000
if temp > max_temp then
max_temp = temp
end
end
return max_temp
end
def get_system_data()
$cpu_freq_max=File.open("/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_max_freq").read.to_i/1000
$cpu_freq_min=File.open("/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_min_freq").read.to_i/1000
$core_count=`nproc`.to_i
lg_info("")
lg_info("CPU Max Frequency : #{$cpu_freq_max} MHz")
lg_info("CPU Min Frequency : #{$cpu_freq_min} MHz")
lg_info("CPU Core Count : #{$core_count}")
lg_info("High Temperature Threshold : #{$temp_limit_upper} °C")
lg_info("Low Temperature Threshold : #{$temp_limit_lower} °C")
get_temp_sensors
lg_info("Temperature Sensors found : #{$temp_sensor_files.count}")
lg_info("Max load Threshold : #{$max_load_allowed}")
lg_info("Hold load Threshold : #{$load_hold}")
lg_info("Frequency Set Delay : #{$hysteresis_delay}")
lg_info("")
end
def get_load()
# get highest value of cpu load (1/5/15 min average)
return Sys::CPU.load_avg.max
end
def check_high_temp(current_temperature)
freq_change=false
if current_temperature > ($temp_limit_upper + $temp_limit_delta2) then
freq_change = 0 - $freq_change_delta2
else
if current_temperature > ($temp_limit_upper + $temp_limit_delta1) then
freq_change = 0 - $freq_change_delta1
else
if current_temperature > $temp_limit_upper then
freq_change = 0 - $freq_change_delta0
end
end
end
lg_dbg("evaluated freq_change: #{freq_change}")
return freq_change
end
def check_low_temp(current_temperature)
freq_change=false
if current_temperature < $temp_limit_lower then
freq_change = $freq_change_delta0
if current_temperature < ($temp_limit_lower - $temp_limit_delta1) then
freq_change = $freq_change_delta1
if current_temperature < ($temp_limit_lower - $temp_limit_delta2) then
freq_change = $freq_change_delta2
end
end
end
lg_dbg("evaluated freq_change: #{freq_change}")
return freq_change
end
def freq_change(freq_diff)
current_freq=cpu_freq_get
cpu_freq_set_all_cores current_freq + freq_diff
end
def cpu_freq_set_all_cores(freq)
lg_dbg("Evaluating to set frequency #{freq.to_s} MHz on all cores")
if freq < $cpu_freq_min then
lg_dbg("Trying to set frequency #{freq.to_s} MHz which is below minimum. setting to minimum")
freq = $cpu_freq_min
end
if freq > $cpu_freq_max then
lg_dbg("Trying to set frequency #{freq.to_s} MHz which is above maximum. setting to maximum")
freq = $cpu_freq_max
end
current_freq=cpu_freq_get
if current_freq == freq then
lg_dbg("Trying to set frequency #{freq.to_s} MHz which is already set, doing nothing")
return
end
lg_dbg2("Setting frequency #{freq.to_s} MHz on all cores")
for core_nr in 0 .. ($core_count - 1) do
res = system("cpufreq-set","-c", core_nr.to_s, "--max", (freq * 1000).to_s );
end
end
def cpu_freq_get()
return File.open("/sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq").read.to_i/1000
end
def eval_freq_change(current_load, current_temperature)
if current_load > $max_load_allowed then
lg_info("High load detected.")
cpu_freq_set_all_cores $cpu_freq_max
else
if current_load > $load_hold then
lg_info("Above normal load detected.")
# high load: don't reduce speed
if freq_change_amount=check_low_temp(current_temperature) then
lg_dbg("Temperature is cool, trying to increase by #{freq_change_amount} MHz")
freq_change freq_change_amount
end
else
# normal load: check temperature
lg_dbg("Load is normal. Checking Temperature")
# check for too high tempratures
if freq_change_amount=check_high_temp(current_temperature) then
# decrease frequency
lg_dbg("Temperature is high, trying to decrease by #{freq_change_amount*-1} MHz")
freq_change freq_change_amount
else
# check for cool enough temperatures
if freq_change_amount=check_low_temp(current_temperature) then
lg_dbg("Temperature is cool, trying to increase by #{freq_change_amount} MHz")
# increase frequency
freq_change freq_change_amount
else
lg_dbg("Temperature is at an acceptable level")
end
end
end
end
end
def main()
$stdout.sync = true
get_system_data()
while(1) do
current_temperature=get_temperature
current_load=get_load
lg_info("Temperature: #{current_temperature} °C Load: #{"%.2f" % current_load} CPU-Frequency: #{cpu_freq_get()} MHz")
eval_freq_change(current_load,current_temperature)
sleep $hysteresis_delay
end
end
main
Code: Alles auswählen
Mar 13 13:57:55 icarus02 systemd[1]: Started CPU Freqency Control to keep maximum temperature.
Mar 13 13:57:55 icarus02 cpu-freq-throttle.rb[4044249]: INFO
Mar 13 13:57:55 icarus02 cpu-freq-throttle.rb[4044249]: INFO CPU Max Frequency : 5000 MHz
Mar 13 13:57:55 icarus02 cpu-freq-throttle.rb[4044249]: INFO CPU Min Frequency : 800 MHz
Mar 13 13:57:55 icarus02 cpu-freq-throttle.rb[4044249]: INFO CPU Core Count : 16
Mar 13 13:57:55 icarus02 cpu-freq-throttle.rb[4044249]: INFO High Temperature Threshold : 65 °C
Mar 13 13:57:55 icarus02 cpu-freq-throttle.rb[4044249]: INFO Low Temperature Threshold : 60 °C
Mar 13 13:57:56 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature Sensors found : 4
Mar 13 13:57:56 icarus02 cpu-freq-throttle.rb[4044249]: INFO Max load Threshold : 10
Mar 13 13:57:56 icarus02 cpu-freq-throttle.rb[4044249]: INFO Hold load Threshold : 8
Mar 13 13:57:56 icarus02 cpu-freq-throttle.rb[4044249]: INFO Frequency Set Delay : 5
Mar 13 13:57:56 icarus02 cpu-freq-throttle.rb[4044249]: INFO
Mar 13 13:57:56 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 82 °C Load: 69.45 CPU-Frequency: 5000 MHz
Mar 13 13:57:56 icarus02 cpu-freq-throttle.rb[4044249]: INFO High load detected.
Mar 13 13:58:01 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 83 °C Load: 68.96 CPU-Frequency: 5000 MHz
Mar 13 13:58:01 icarus02 cpu-freq-throttle.rb[4044249]: INFO High load detected.
Mar 13 13:58:06 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 82 °C Load: 68.44 CPU-Frequency: 5000 MHz
Mar 13 13:58:06 icarus02 cpu-freq-throttle.rb[4044249]: INFO High load detected.
Mar 13 13:58:11 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 83 °C Load: 67.95 CPU-Frequency: 5000 MHz
Mar 13 13:58:11 icarus02 cpu-freq-throttle.rb[4044249]: INFO High load detected.
...
Mar 13 14:37:19 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 49 °C Load: 8.16 CPU-Frequency: 5000 MHz
Mar 13 14:37:19 icarus02 cpu-freq-throttle.rb[4044249]: INFO Above normal load detected.
Mar 13 14:37:24 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 50 °C Load: 8.12 CPU-Frequency: 5000 MHz
Mar 13 14:37:24 icarus02 cpu-freq-throttle.rb[4044249]: INFO Above normal load detected.
Mar 13 14:37:29 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 50 °C Load: 8.08 CPU-Frequency: 5000 MHz
Mar 13 14:37:29 icarus02 cpu-freq-throttle.rb[4044249]: INFO Above normal load detected.
Mar 13 14:37:34 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 49 °C Load: 8.05 CPU-Frequency: 5000 MHz
Mar 13 14:37:34 icarus02 cpu-freq-throttle.rb[4044249]: INFO Above normal load detected.
Mar 13 14:37:39 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 68 °C Load: 8.01 CPU-Frequency: 5000 MHz
Mar 13 14:37:39 icarus02 cpu-freq-throttle.rb[4044249]: INFO Above normal load detected.
Mar 13 14:37:44 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 71 °C Load: 7.97 CPU-Frequency: 5000 MHz
Mar 13 14:37:49 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 64 °C Load: 7.95 CPU-Frequency: 4500 MHz
Mar 13 14:37:54 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 49 °C Load: 7.91 CPU-Frequency: 4500 MHz
Mar 13 14:37:59 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 73 °C Load: 7.90 CPU-Frequency: 5000 MHz
Mar 13 14:38:04 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 68 °C Load: 7.88 CPU-Frequency: 4500 MHz
Mar 13 14:38:09 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 62 °C Load: 7.86 CPU-Frequency: 4400 MHz
Mar 13 14:38:14 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 64 °C Load: 7.83 CPU-Frequency: 4400 MHz
Mar 13 14:38:19 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 64 °C Load: 7.79 CPU-Frequency: 4400 MHz
Mar 13 14:38:24 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 65 °C Load: 7.75 CPU-Frequency: 4400 MHz
Mar 13 14:38:29 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 51 °C Load: 7.72 CPU-Frequency: 4400 MHz
Mar 13 14:38:34 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 64 °C Load: 7.69 CPU-Frequency: 4900 MHz
Mar 13 14:38:39 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 50 °C Load: 7.65 CPU-Frequency: 4900 MHz
Mar 13 14:38:44 icarus02 cpu-freq-throttle.rb[4044249]: INFO Temperature: 58 °C Load: 7.61 CPU-Frequency: 5000 MHz
Re: Nützliche selbstgestrickte Scripte für die Alltagsadministration
Ich bekomme da eine Fehlermeldung bei dem CPU Script
Bash Scripte die ich fast täglich nutze :
https://github.com/speefak/ipspec
https://github.com/speefak/df_mod
https://github.com/speefak/rear-backup
https://github.com/speefak/backup_system_user_config
Code: Alles auswählen
./test
<internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- sys-cpu (LoadError)
from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
from ./test:31:in `<main>'
https://github.com/speefak/ipspec
https://github.com/speefak/df_mod
https://github.com/speefak/rear-backup
https://github.com/speefak/backup_system_user_config
- heisenberg
- Beiträge: 3612
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Re: Nützliche selbstgestrickte Scripte für die Alltagsadministration
Im Head des Scriptes stehen ein paar Installationsanweisungen. Es müssen Ruby-Module installiert werden:speefak hat geschrieben:03.04.2024 11:48:53Ich bekomme da eine Fehlermeldung bei dem CPU Script
Code: Alles auswählen
./test <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- sys-cpu (LoadError) from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require' from ./test:31:in `<main>'
Code: Alles auswählen
# gem install sys-cpu awesome_print find
Re: Nützliche selbstgestrickte Scripte für die Alltagsadministration
whisper hat geschrieben:25.03.2021 20:13:351+ für den Thread!
Ich hatte mal vor Jahren einen Rechte Gau. Das damals verwendete Backup hatte beim Restore die Rechte der Dateien versaut.
Ich war selber schuld, weil ich halt direkt zurück gesichert hatte.
Deshalb läuft auf dem Server nun das hier:Die Datei dateirechte.txt wird täglich mitgesichert und hilft versehentliche Änderungen zu reparierenCode: Alles auswählen
#!/bin/bash #dateirechte.sh DATUM=$(date +%d-%m-%Y) nice getfacl -R -n / >/home/backup/dateirechte-$DATUM.txt # wieder herstellen mit #setfacl --restore=dateirechte.txt
Ausserdem bei evtl. forensichen Vorfällen
Das ist gar nicht so verkehrt - mir ist auch schon mal aus versehen ein chown -R root:root / durchgelaufen - war nicht so der dolle . Zum Glück hatte ich noch ein REAR image. Schön wäre die Möglichkeit Pfade auszulassen. Mein 20 TB Archiv hat nur eine Rechte/Zugriffs Konfiguration.
- whisper
- Beiträge: 3198
- Registriert: 23.09.2002 14:32:21
- Lizenz eigener Beiträge: GNU Free Documentation License
-
Kontaktdaten:
Re: Nützliche selbstgestrickte Scripte für die Alltagsadministration
Danke, läuft immer noch und hat mit der Zeit schon ein paar mal geholfen.speefak hat geschrieben:03.04.2024 11:54:56Das ist gar nicht so verkehrt - mir ist auch schon mal aus versehen ein chown -R root:root / durchgelaufen - war nicht so der dolle . Zum Glück hatte ich noch ein REAR image. Schön wäre die Möglichkeit Pfade auszulassen. Mein 20 TB Archiv hat nur eine Rechte/Zugriffs Konfiguration.
Re: Nützliche selbstgestrickte Scripte für die Alltagsadministration
Pakete sind installiert, Ruby Pakete zu cpufrequtilsheisenberg hat geschrieben:03.04.2024 11:51:27Im Head des Scriptes stehen ein paar Installationsanweisungen. Es müssen Ruby-Module installiert werden:speefak hat geschrieben:03.04.2024 11:48:53Ich bekomme da eine Fehlermeldung bei dem CPU Script
Code: Alles auswählen
./test <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- sys-cpu (LoadError) from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:85:in `require' from ./test:31:in `<main>'
cpufrequtils müssen auch installiert sein.Code: Alles auswählen
# gem install sys-cpu awesome_print find
- heisenberg
- Beiträge: 3612
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Re: Nützliche selbstgestrickte Scripte für die Alltagsadministration
Ich wiederhole das nochmal: Die folgende Zeile, die im Skript steht und die ich in meinem letzten Beitrag schrieb, muss als root ausgeführt werden:
Code: Alles auswählen
gem install sys-cpu awesome_print find
Re: Nützliche selbstgestrickte Scripte für die Alltagsadministration
Dokus in Scripten lese ich als erstes hab's als root und User probiert. Werd's die Tage nochmal inner frischen D12 VM probieren.
- heisenberg
- Beiträge: 3612
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Re: Nützliche selbstgestrickte Scripte für die Alltagsadministration
Was ist bei Dir die Ausgabe von:
Die Fehlermeldung von Dir bedeutet, dass das Modul nicht geladen werden könnte, weil nicht gefunden.
Code: Alles auswählen
gem install sys-cpu awesome_print find
Re: Nützliche selbstgestrickte Scripte für die Alltagsadministration
Code: Alles auswählen
sudo gem install sys-cpu awesome_print find
[sudo] Passwort für speefak:
Building native extensions. This could take a while...
ERROR: Error installing sys-cpu:
ERROR: Failed to build gem native extension.
current directory: /var/lib/gems/3.1.0/gems/ffi-1.16.3/ext/ffi_c
/usr/bin/ruby3.1 -I /usr/lib/ruby/vendor_ruby -r ./siteconf20240413-2613428-vfkp0d.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h
You might have to install separate package for the ruby development
environment, ruby-dev or ruby-devel for example.
extconf failed, exit code 1
Gem files will remain installed in /var/lib/gems/3.1.0/gems/ffi-1.16.3 for inspection.
Results logged to /var/lib/gems/3.1.0/extensions/x86_64-linux/3.1.0/ffi-1.16.3/gem_make.out
Successfully installed awesome_print-1.9.2
Parsing documentation for awesome_print-1.9.2
Done installing documentation for awesome_print after 0 seconds
Successfully installed find-0.2.0
Parsing documentation for find-0.2.0
Done installing documentation for find after 0 seconds
2 gems installed