이메일 및 IP 주소가 포함된 Bash 재부팅 스크립트

이메일 및 IP 주소가 포함된 Bash 재부팅 스크립트

컴퓨터를 재부팅하는 쉘 스크립트를 만들었습니다. 스크립트는 호스트의 일부 정보가 포함된 이메일을 보낸 다음 재부팅됩니다.

스크립트는 cron에 의해 실행됩니다.

터미널에서 스크립트를 실행하면 꽤 잘 실행되지만 cron을 사용하여 실행하면 IP 주소와 "servicos"가 누락됩니다.

내 스크립트는 다음과 같습니다

#!/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

나는 이미 awk도 테스트했습니다.

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

하지만 여전히 작동하지 않습니다 ...

cron(자동) 실행 후 수신된 이메일의 예:

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

Uptime: up 1 minute

Carregado na inicializacao:

터미널(수동) 실행 후 수신된 이메일의 예:

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

저는 현재 Debian Jessie 기반의 Raspbian을 사용하고 있습니다.

답변1

PATH스크립트 내부 를 정의 하고 "외관적인" 변경 사항을 적용했습니다.

#!/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

관련 정보