Beispiele für Shell-Skript-Wrapper: Verbesserung von Ping- und Host-Befehlen

watch 4m, 20s
views 2

13:13, 12.03.2024

Artikel Inhalt
arrow

  • Vorteile von Shell Script Wrappern
  • Beispiel: Erstellung eines Shell-Script-Wrappers
  • Tools zur Fehlerbehebung: Ping und Host-Befehle
  • Kundenspezifischer Wrapper für Ping
  • Kundenspezifischer Wrapper für Host
  • Verwendung der ursprünglichen Ping- und Host-Befehle
  • Übergabe von Kommandozeilenargumenten über Bash Shell Script Wrapper
  • Zusammenfassend

Die Transparenz für die Benutzer von *nix-Befehlen kann mit Shell-Skript-Wrappern erreicht werden. Ein Wrapper ist eine Shell-Funktion oder ein Shell-Skript oder ein Alias, das ein Dienstprogramm oder einen Systembefehl enthält.

Unix- und Linux-ähnliche Betriebssysteme können 64-Bit- und 32-Bit-Versionen von Anwendungen ausführen. Das bedeutet, dass Sie ein Wrapper-Skript schreiben können, das die benötigte Version für die 64-Bit- oder 32-Bit-Hardwareplattform auswählt und ausführt. In einer Hochleistungsumgebung kann man Hunderte von Wrapper-Skripten finden, die in Python, Shell und Perl geschrieben sind, um Aufträge zu verwalten und zu übermitteln, Fehler zu beheben, Backups zu erstellen, den gemeinsamen Speicher einzurichten, die Clusterauslastung zu ermitteln und vieles mehr.

In diesem Artikel möchten wir unsere praktischen Erfahrungen weitergeben und erklären, wie der Shell-Wrapper erstellt wird, um das primäre Werkzeug zur Fehlerbehebung zu verbessern.    

Vorteile von Shell Script Wrappern

  • Starten und rufen Sie den gewünschten Auftrag auf.
  • Anpassung von *nix-Befehlen.
  • Hilfreich in HPC-, wissenschaftlichen Forschungs- und Cluster-Umgebungen.
  • Dies ist eine perfekte zeitsparende Option.
  • Übergabe von Standardargumenten an Anwendungen oder Binärdateien von Drittanbietern.
  • Wrapper sind ideal für Befehle oder Tools, die Systemsteuerungen, angepasste Umgebungseinstellungen oder Parameter für die Auftragsübermittlung benötigen.

Beispiel: Erstellung eines Shell-Script-Wrappers

Das nächste Shell-Skript startet kvminit java app, indem es Protokolle in die Datei umleitet und die Systemumgebung einrichtet:

export JAVA_HOME=${JAVA_HOME:-/usr/java}
export CLASSPATH="/home/vivek/apps/java/class
exec ${JAVA_HOME}/bin/java kvminit "$@" &>/var/log/kvm/logfile

Ein weiteres Beispiel für ein Wrapper-Skript ist das Stoppen/Starten des Clients oder nfs-Servers:

_me=${0##*/}          # Server or client?
_server="/etc/init.d/rpcbind /etc/init.d/rpcidmapd /etc/init.d/nfslock /etc/init.d/nfs" # list of server init scripts
_client="/etc/init.d/rpcbind /etc/init.d/rpcidmapd /etc/init.d/nfslock" # list of client init scripts
_action="$1"        # stop / start / restart
# activate all scripts with stop or start or restart
runme(){
local i="$1"
local a="$2"
für t in $i
do
$t $a
done

usage(){
echo "$_me stop|restart|start|reload|status";
exit 0
}
[ $# -eq 0 ] && usage
# main logic
case $_me in
nfs.server) runme "$_server" "$_action" ;;
nfs.client) runme "$_client" "$_action" ;;
*) usage
esac

Tools zur Fehlerbehebung: Ping und Host-Befehle

Die grundlegenden Werkzeuge zur Fehlerbehebung für Systemadministratoren sind host und ping.

  • Der Host-Befehl ist hilfreich bei der Angabe von DNS-Problemen. Es ist möglich, Daten über Domain-Name-Sys-Records für bestimmte IPs und gleichzeitig Hostnamen zu erhalten, um DNS-Probleme zu beheben.
  • Ping-Befehle werden benötigt, um die Konnektivität zwischen Geräten im entfernten oder lokalen Netz festzustellen.  

Kundenspezifischer Wrapper für Ping

Das Senden einer Ping-Anfrage an eine Domäne durch Entfernen von Protokoll, Benutzername, urls:pass mit dem System /bin/ping sieht so aus:

ping(){
local t="$1"
local _ping="/bin/ping"
local c=$(_getdomainnameonly "$t")
[ "$t" != "$c" ] && echo "Sending ICMP ECHO_REQUEST to \"$c\"..."
$_ping $c
}

Kundenspezifischer Wrapper für Host

Für Dns-Lookups System /usr/bin/host verwenden Sie das folgende:

host(){
local t="$1"
local _host="/usr/bin/host"
local c=$(_getdomainnameonly "$t")
[ "$t" != "$c" ] && echo "Performing DNS lookups for \"$c\"..."
$_host $c

Verwendung der ursprünglichen Ping- und Host-Befehle

Sie müssen ein Shell-Skript mit dem Namen $HOME/scripts/wrapper_functions.lib erstellen und alle 3 Funktionen wie hier eingeben:

_getdomainnameonly(){
local h="$1"
local f="${h,,}"
# Protokollteil des Namens löschen
f="${f#http://}"
f="${f#https://}"
f="${f#ftp://}"
f="${f#scp://}"
f="${f#scp://}"
f="${f#sftp://}"
#  delete username or/and username:password part of hostname
f="${f#*:*@}"
f="${f#*@}"
# delete all /foo/xyz.html*
f=${f%%/*}
# Reveal only domain name
echo "$f"
}
ping(){
local t="$1"
local _ping="/bin/ping"
local c=$(_getdomainnameonly "$t")
[ "$t" != "$c" ] && echo "Sending ICMP ECHO_REQUEST to \"$c\"..."
$_ping $c
}
host(){
local t="$1"
local _host="/usr/bin/host"
local c=$(_getdomainnameonly "$t")
[ "$t" != "$c" ] && echo "Performing DNS lookups for \"$c\"..."
$_host $c
}

Bearbeiten Sie anschließend $HOME/.bashrc, indem Sie die folgende Zeile hinzufügen:

 Quelle $HOME/scripts/wrapper_functions.lib

Speichern Sie die Datei mit den Änderungen und testen Sie, ob alles wie gewünscht funktioniert.

Übergabe von Kommandozeilenargumenten über Bash Shell Script Wrapper

_getdomainnameonly(){
local h="$1"
local f="${h,,}"
# Protokollteil des Namens löschen
f="${f#http://}"
f="${f#https://}"
f="${f#ftp://}"
f="${f#scp://}"
f="${f#scp://}"
f="${f#sftp://}"
# delete username or/and username:password part of hostname
f="${f#*:*@}"
f="${f#*@}"
# delete all /foo/xyz.html*
f=${f%%/*}
# Reveal only domain name
echo "$f"
}
ping(){
local array=( $@ )
local len=${#array[@]}     
local host=${array[$len-1]}
local args=${array[@]:0:$len-1}
local _ping="/bin/ping"
local c=$(_getdomainnameonly "$host")
[ "$t" != "$c" ] && echo "Sending ICMP ECHO_REQUEST to \"$c\"..."
# pass host and args
$_ping $args $c
}
host(){
local array=( $@ )
local len=${#array[@]}
local host=${array[$len-1]}
local args=${array[@]:0:$len-1}
local _host="/usr/bin/host"
local c=$(_getdomainnameonly "$host")
[ "$t" != "$c" ] && echo "Performing DNS lookups for \"$c\"..."
$_host $args $c
}

Zusammenfassend

Wir haben gemeinsame Funktionen und ein kleines Skript, das Operationen ausführen kann, um die benötigten Ergebnisse zu erzielen. Um weitere Funktionen zu erstellen, sollten Sie über vorhandene Binärdateien verfügen und Code wiederverwenden.

Teilen

War dieser Artikel für Sie hilfreich?

VPS beliebte Angebote

-15.6%

CPU
CPU
2 Xeon Cores
RAM
RAM
512 MB
Space
Space
10 GB SSD
Bandwidth
Bandwidth
1 TB
KVM-SSD 512 Metered Linux

5.33 /mo

/mo

Alle 12 Monate abgerechnet

-15.4%

CPU
CPU
4 Xeon Cores
RAM
RAM
4 GB
Space
Space
100 GB SSD
Bandwidth
Bandwidth
60 Mbps
DDoS Protected SSD-wKVM 4096 Windows

73 /mo

/mo

Alle 12 Monate abgerechnet

-10%

CPU
CPU
4 Epyc Cores
RAM
RAM
4 GB
Space
Space
50 GB NVMe
Bandwidth
Bandwidth
Unlimited
aiKVM-NVMe 4096 Linux

16.83 /mo

/mo

Alle 12 Monate abgerechnet

-18.6%

CPU
CPU
4 Xeon Cores
RAM
RAM
4 GB
Space
Space
100 GB SSD
Bandwidth
Bandwidth
4 TB
wKVM-SSD 4096 Metered Windows

38 /mo

/mo

Alle 12 Monate abgerechnet

-10%

CPU
CPU
6 Epyc Cores
RAM
RAM
8 GB
Space
Space
100 GB NVMe
Bandwidth
Bandwidth
Unlimited
Keitaro KVM 8192
OS
CentOS
Software
Software
Keitaro

28.99 /mo

/mo

Alle 12 Monate abgerechnet

-13.1%

CPU
CPU
2 Xeon Cores
RAM
RAM
512 MB
Space
Space
10 GB SSD
Bandwidth
Bandwidth
300 GB
KVM-SSD 512 HK Linux

7 /mo

/mo

Alle 12 Monate abgerechnet

-10%

CPU
CPU
4 Epyc Cores
RAM
RAM
4 GB
Space
Space
50 GB NVMe
Bandwidth
Bandwidth
Unlimited
wKVM-NVMe 4096 Windows

18.1 /mo

/mo

Alle 12 Monate abgerechnet

-15%

CPU
CPU
6 Xeon Cores
RAM
RAM
8 GB
Space
Space
100 GB SSD
Bandwidth
Bandwidth
80 Mbps
DDoS Protected SSD-wKVM 8192 Windows

101 /mo

/mo

Alle 12 Monate abgerechnet

-10%

CPU
CPU
3 Xeon Cores
RAM
RAM
1 GB
Space
Space
40 GB HDD
Bandwidth
Bandwidth
Unlimited
KVM-HDD 1024 Linux

6.1 /mo

/mo

Alle 12 Monate abgerechnet

-10%

CPU
CPU
8 Epyc Cores
RAM
RAM
32 GB
Space
Space
200 GB NVMe
Bandwidth
Bandwidth
Unlimited
Keitaro KVM 32768
OS
CentOS
Software
Software
Keitaro

77.54 /mo

/mo

Alle 12 Monate abgerechnet

Weitere Artikel zu diesem Thema

cookie

Cookies und Datenschutz akzeptieren?

Wir verwenden Cookies, um sicherzustellen, dass wir Ihnen die beste Erfahrung auf unserer Website bieten. Wenn Sie fortfahren, ohne Ihre Einstellungen zu ändern, gehen wir davon aus, dass Sie mit dem Empfang aller Cookies auf der HostZealot-Website einverstanden sind.