Bash-Neustartskript mit E-Mail- und IP-Adresse

Bash-Neustartskript mit E-Mail- und IP-Adresse

Ich habe ein Shell-Skript erstellt, um meinen Rechner neu zu starten. Das Skript sendet eine E-Mail mit einigen Informationen zum Host und startet dann neu.

Das Skript wird per Cron ausgeführt.

Wenn ich das Skript vom Terminal aus ausführe, läuft es ziemlich gut, aber wenn es mit Cron ausgeführt wird, fehlen die IP-Adresse und die „Servicos“.

Mein Skript ist:

#!/bin/bash

# Carrega uptime
up=("$(uptime -p)")

# Carrega nome do host
host=("$(hostname)")

# Carrega IPs do host
meu_ip=("$(ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1')")

# Carrega data/hora atual
data=("$(date +"%Y-%m-%d")")
hora=("$(date +"%T")")

# Carrega servicos iniciados durante o boot, ordenados alfabeticamente
servicos=("$(ls -1 /etc/rc$(runlevel| cut -d" " -f2).d/S* | awk -F'[0-9][0-9]' '{print " " $2}' | sort -k 3)")

### Define parametros de e-mail ###
email="[email protected]" # E-mail do destinatario do alerta
assunto=$host": [Alert] Restart ["$meu_ip"]" # Assunto do email

# Envio de email de alerta
printf "%b\n" "Sistema [$host] ($meu_ip) reiniciado em $data.\n
Uptime: $up\n
Carregado na inicializacao:\n$servicos" | /usr/bin/mail -s "$assunto" "$email"

# Aguarda 5s para que o email seja enviado corretamente
sleep 5

# Reinicia o equipamento
/sbin/reboot

Ich habe awk auch schon getestet:

meu_ip=("$(ifconfig | awk '/inet addr/{print substr($2,6)}' | awk 'NR==1{print $1}')")

Funktioniert aber immer noch nicht ...

Beispiel einer empfangenen E-Mail nach der (automatischen) Cron-Ausführung:

Sistema [raspberrypi] () reiniciado em 2016-09-26.

Uptime: up 1 minute

Carregado na inicializacao:

Beispiel einer empfangenen E-Mail nach der (manuellen) Ausführung im Terminal:

Sistema [raspberrypi] (192.168.8.121) reiniciado em 2016-09-26.

Uptime: up 30 minutes

Carregado na inicializacao:
 avahi-daemon
 bluetooth
 bootlogs
 cron
 dbus
 dhcpcd
 dphys-swapfile
 exim4
 motd
 ntp
 plymouth
 rc.local
 rmnologin
 rsyslog
 ssh
 triggerhappy

Ich verwende derzeit Raspbian basierend auf Debian Jessie.

Antwort1

Das Innere des Skripts definiert PATHund einige „kosmetische“ Änderungen vorgenommen.

#!/bin/bash

# Define caminho dos binarios
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Carrega uptime
up=("$(uptime -p | awk '{$1=""; sub("  ", " "); print}')")

# Carrega nome do host
host=("$(hostname)")

# Carrega IPs do host
meu_ip=("$(ifconfig | awk '/inet addr/{print substr($2,6)}' | awk 'NR==1{print $1}')")

# Carrega data/hora atual
data=("$(date +"%Y-%m-%d")")
hora=("$(date +"%T")")

# Carrega servicos iniciados durante o boot, ordenados alfabeticamente
servicos=("$(ls -1 /etc/rc$(/sbin/runlevel| cut -d" " -f2).d/S* | awk -F'[0-9][0-9]' '{print " Servico :-> " $2}' | sort -k 3)")

### Define parametros de e-mail ###
email="[email protected]"        # E-mail do destinatario do alerta
assunto=$host": [Alert] Restart ["$meu_ip"]" # Assunto do email

# Envio de email de alerta
printf "%b\n" "Sistema [$host] ($meu_ip) reiniciado em $data.\n
Uptime: $up\n
Carregado na inicializacao:\n$servicos" | mail -s "$assunto" "$email"

# Aguarda 10s para que o email seja enviado corretamente
sleep 10

# Reinicia o equipamento
reboot

verwandte Informationen