我编写了一个 shell 脚本来重新启动我的机器。该脚本会发送一封包含主机一些信息的电子邮件,然后重新启动。
该脚本将由 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