1. 关闭桌面显示

对于ssh 党。当然不须要系统花费资源在显示上。

所以我们先在 "raspi-conifg" 下选择默认启动为Text 启动(这好像也是Raspbian 的默认配置)。

其次。我们还能够直接关闭HDMI 接口, 使用"
/opt/vc/bin/tvservice -o " (直接使用 tvservice -o 亦可,如想了解很多其它请使用 tvservice --help 查阅此命令很多其它地用法)命令就可以轻易做到。

pi@long ~ $ /opt/vc/bin/tvservice -o

Powering off HDMI

pi@long ~ $ tvservice -o

Powering off HDMI

并且。这个命令仅仅是关闭当前,如想重新启动后仍然奏效。那么你须要将上面命令加入至“
/etc/rc.local ”文件里的exit 语句之前就可以。

2. 使用看门狗防死机[1]

watchdog。 相信非常多人都对这个概念不陌生,中文译为“看门狗”。工作原理非常easy:在系统执行以后也就启动了看门狗的计数器。看门狗就開始自己主动计数,假设到了一定的时间还不去清看门狗(俗称喂狗),那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位(假设你想学习很多其它的关于看门狗的东西。请下载内核源代码,看门狗相关的文档可见"kernel-version/Document/watchdog/" 文件夹下的相关内容)。

那么。树莓派下我们能够使用看门狗来不断检測板卡的一些状态,假设状态不符合看门狗配置文件里设置的(比方温度过高、内存不足等)。系统就会复位,从而保证系统/板卡的安全。

首先,我们确保系统中的看门狗模块已执行:

pi@long ~ $ lsmod  | grep dog

bcm2708_wdog            3613  1

假设发现你的系统中没有上面的模块在执行,那么你须要执行“ sudo modprobe bcm2708_wdog ”来载入看门狗模块。

其次。我们须要执行看门狗守护进程。他的功能就是每间隔一定时间向看门狗硬件模块发送一个状态。假设失败,则触发硬件看门狗让树莓派重新启动:

$ sudo apt-get install chkconfig watchdog
    # 当中 chkconfig 用于一些系统配置,可能已安装,可能被一些系统精简掉,这里加入上。假设已安装apt-get 会自己主动不关心。

$ chkconfig watchdog on              
# 设定看门狗程序随系统启动自己主动执行

如今我们能够查看watchdog 是否已执行:

pi@long ~ $ chkconfig -A | grep watchdog              # chkconfig -A 还会显示非常多其它的状态,有兴趣能够看看

watchdog                on

最后,我们须要对看门狗的配置文件“ /etc/watchdog.conf ”进行例如以下配置:

$
sudo vim /etc/watchdog.conf 

(1)去掉 watchdog-device = /dev/watchdog 前的凝视#号。让他监控的设备指向CPU的硬件看门狗 

(2)去掉 max-load-1 = 24
前的凝视#号,当1分钟load进程超过24个的时候(一般5个就是超高负载了,更高能够觉得是死机,这在遭遇DDOS攻击的时候非常easy遇到)就触发重新启动)

(3)检查板卡温度:

首先去掉例如以下两行前的凝视号 "#"

#temperature-device =

#max-temperature = 120

再将这两行改动为:

temperature-device = /sys/class/thermal/thermal_zone0/temp

max-temperature = 75000  

注:树莓派的工作温度为 -40C ~ 85℃, 温度一般不超过85度就不会损坏芯片。/sys/class/thermal/thermal_zone0/temp记录的是实时的温度。单位为千分之中的一个摄氏度,所以这里设置75000就是75℃。已是非常保险的温度了。并且我一般使用温度保持在60下面。还是非常不错的。

(4)还能够设置内存耗尽就重新启动,如min-memory =1 前的凝视#号去掉

(5)还能够设置监控的间隔。如 interval = 1 前的凝视#号去掉,该1为随意数字,单位是秒,默认是10秒一次健康检查

最后我们仅仅须要将看门狗同意起来就可以:/etc/init.d/watchdog start

最后假设你想測试一下你的看门狗能不能正常工作,能够执行一下 shell 炸弹"
:(){ :|:& };: ",shell 炸弹会迅速耗尽系统资源,然后直接导致死机。假设你的看门狗奏效。树莓派会在10秒后重新启动~~然后你就又能够ssh 链接了。

注:到这里。看门狗就已经配置完毕(会开机自启动),妈妈再也不用操心你的树莓派死机后链接不上了!

2.1 龙哥小课堂: 简析shell 炸弹

对于上面这个shell 炸弹" :(){ :|:& };: ",整个语句13个字符(包含两个空格),那么它怎样做到迅速耗尽系统资源直接导致死机的呢?

还是挺有意思的。假设你有兴趣。我在这里做个简单的介绍

整个语句依据shell 语法。能够分成两个语句“
:(){ :|:& } ”和“ : ”,当中分号和C语言一样。作为语句的分隔符!那么就非常easy了:前面的语句是定义了一个“
: ”函数,而第二个语句是执行这个函数。(依据shell 语法,函数定义能够使用function func_name() { ... } 这样的的利用keywordfunction 指示清楚,亦可直接使用func_name() { ... } 这样的简单方便的定义)

那么为什么这几个字符定义的函数可以这么牛的耗尽资源?我们分开来看 :() 这个部分指示了函数名为 :且不须要传递參数。后面的函数定义部分由符号{}包含在内!所以函数“
: ”所做的工作就是“ :|:& ”, 当中“:|:” 部分管道号"
| "前后分别两次调用函数“ : ”函数本身,而后面的“ & ”指示后台执行。

所以串起来此语句的工作流程就是:

1. 前半部分“ :(){ :|:& } ”定义了一个“ : ”函数。这个函数会后台调用它本身“ : ”,而调用的“ : ”又会继续调用。这样不断地死循环下去。

2. 前面这仅仅是定义了“ : ”函数。后半部分“ : ”则是直接调用执行这个函数“ : ”。

所以不断地调用自身...,直至耗尽资源直接导致死机!

3. 怎样检查树莓派的使用状况

这里写了一个简单的shell 脚本,能够用来查询CPU 温度,CPU利用率,GPU温度,内存状况以及磁盘使用状态。非常easy,不多解释直接贴代码:

#!/usr/bin/python
import os def get_CPU_temp():
f = file("/sys/class/thermal/thermal_zone0/temp")
temp = float(f.read().strip("\n"))/1000
return "%3.1f " % temp def get_CPU_use():
return os.popen("top -n1 | awk '/Cpu\(s\):/ {print $2}'").read().strip("\n") def get_GPU_temp():
status = os.popen("/opt/vc/bin/vcgencmd measure_temp").read().strip("\n")
return status.split("=")[1].replace("\'C", "") def getRAMinfo():
p = os.popen('free')
i = 0
while 1:
i = i + 1
line = p.readline()
if i==2:
return(line.split()[1:4]) def getDiskSpace():
p = os.popen("df -h /")
i = 0
while 1:
i = i +1
line = p.readline()
if i==2:
return(line.split()[1:5])
if __name__ == '__main__':
(RAM_total, RAM_used, RAM_free) = getRAMinfo()
(DISK_total, DISK_used, DISK_free, DISK_perc) = getDiskSpace()
print """Current status:
\tCPU Temperature : %s\'C
\tCPU Use : %s%c\n
\tGPU Temperature : %s\'C\n
\tRAM Total : %.1fMB
\tRAM Used : %.1fMB
\tRAM Free : %.1fMB\n
\tDISK Total : %s
\tDISK Used : %s
\tDISK Used Percentage : %s """ % (get_CPU_temp(), get_CPU_use(), 0x25, get_GPU_temp(), float(RAM_total)/1000, float(RAM_used)/1000, float(RAM_free)/1000, DISK_total, DISK_used, DISK_perc)

执行的效果例如以下:

pi@long ~ $ ./get.py
Current status:
CPU Temperature : 48.7 'C
CPU Use : 0.7% GPU Temperature : 48.7'C RAM Total : 448.0MB
RAM Used : 63.2MB
RAM Free : 384.8MB DISK Total : 7.2G
DISK Used : 2.4G
DISK Used Percentage : 35%

这样,我们远程登陆时,能够随时执行此脚本查询一下当前的树莓派的状况了!

4. 开机后发送邮件告知 IP地址[3]

对于ssh 党,什么最重要?当然是小 pi 的IP 地址咯,那么前面我们说到 /etc/rc.local 文件是用来配置启动后运行的。我们能够在里面加入一些自己定义的内容。

那么我们能够写一个脚本,获取本机IP然后将此地址发送到指定的邮箱中,这样我们除了能够获取IP 地址之外,还能够知道什么时候系统重新启动过(有可能是上面的看门狗发现系统状况不正确后重新启动的系统。)。有了此步骤。即使我设置了dhcp 动态分配IP 也不怕找不到树莓派IP 了。!

(当然,大神能够使用nmap 查找当前网段的IP,那么不在一个网段呢?假设树莓派在家里呢?)

我们能够先写一个python 脚本叫做 sendip.py:

#/bin/env python
# -*-coding:utf8-*-
import socket
import fcntl
import time
import struct
import smtplib
import urllib
import datetime
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage #发送邮件的基本函数,參数依次例如以下
# smtp服务器地址、邮箱用户名,邮箱秘密。发件人地址。收件人地址(列表的方式),邮件主题,邮件html内容
def sendEmail(smtpserver, username, password, sender, receiver, subject, msghtml):
msgRoot = MIMEMultipart('related')
msgRoot["To"] = ','.join(receiver)
msgRoot["From"] = sender
msgRoot['Subject'] = subject
msgText = MIMEText(msghtml,'html','utf-8')
msgRoot.attach(msgText)
#sendEmail
smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(username, password)
smtp.sendmail(sender, receiver, msgRoot.as_string())
smtp.quit() # 检查网络连同性
def check_network():
# 试验5次ping 百度,假设连通就返回True,否则返回False
for i in range(0, 5):
try:
result=urllib.urlopen('http://baidu.com').read()
#print result
print "Network is Ready!"
break
except Exception , e:
print e
print "Network is not ready,Sleep 5s...."
time.sleep(5)
else:
print "Sorry that pi isn't connectted to Internet now"
return False
return True # 获得本级制定接口的ip地址
def get_ip_address():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("1.1.1.1",80))
ipaddr=s.getsockname()[0]
s.close()
return ipaddr if __name__ == '__main__':
if check_network():
ipaddr = get_ip_address()
now = datetime.datetime.now()
time_info = now.strftime('%Y-%m-%d %A %H:%M:%S')
send_text = "Boot time: %s\nIP addr: %s" % (time_info, ipaddr)
sendEmail('smtp.163.com','网易邮箱账号','网易邮箱密码','邮箱邮箱地址',['收件人地址'], 'Raspberry Pi boot status', send_text)
else:
print "Sorry that I can't help without network"

将上面的脚本倒数第三行中对应信息改动了就可以!

注意。收件人是列表形式。能够加入多个邮箱。

建议创建一个新的邮箱,专门用作发送树莓派发送邮件之用。

那么最后我们将执行它的命令 “ /usr/bin/python /home/pi/send_ip.py ” 加入到文件“
 /etc/rc.local  ”中(exit 语句之前。)让它开机自执行就可以。

================

[1] http://www.eeboard.com/bbs/thread-6763-1-1.html

[2] 很多其它chkconfig 參见: http://www.cnblogs.com/panjun-Donet/archive/2010/08/10/1796873.html

[3] http://www.opstool.com/article/299

树莓派玩耍笔记4 -- 树莓派ssh党必备的配置的更多相关文章

  1. 树莓派玩耍笔记1 -- 开箱 & 安装系统以及简单配置

    零.前言 树莓派是什么? 吃的么? 呵呵,假设您连这个还不知道,真是out 了. 麻烦出门左拐.百度去(或者,看看官网去?),算了.还是粘贴一些大家都知道的树莓派百科吧: 树莓派由注冊于英国的慈善组织 ...

  2. 树莓派学习笔记—— 源码方式安装opencv

    0.前言     本文介绍怎样在树莓派中通过编译源码的方式安装opencv,并通过一个简单的样例说明怎样使用opencv.     很多其它内容请參考--[树莓派学习笔记--索引博文] 1.下载若干依 ...

  3. 树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)

    若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/110940484长期持续带来更多项目与技术分享, ...

  4. 树莓派开发笔记(十二):入手研华ADVANTECH工控树莓派UNO-220套件(一):介绍和运行系统

    前言   树莓派也可以做商业应用,工业控制,其稳定性和可靠性已经得到了验证,故而工业控制,一些停车场等场景也有采用树莓派作为主控的,本片介绍了研华ADVANTECH的树莓派套件组UNO-220-P4N ...

  5. 树莓派开发笔记(十四):入手研华ADVANTECH工控树莓派UNO-220套件(三):使用研发自带系统测试rtc、gpio、232和485套件接口

    前言   上一篇说明了必须要使用研华自带的8G卡的系统,通过沟通拿到了相关的系统,购买的时候会带8GB的卡,请自行备份一份镜像.本篇对uno-220套件的相关研华配套的额外接口做测试,篇幅较长,重点讲 ...

  6. 树莓派学习笔记——交叉编译练习之SQLite3安装

    0.前言     本博文可能并没有太多使用价值.不过为了练习而练习.在树莓派上使用SQLite有非常多的方法,安装的方法也有非常多.     [1]假设使用Python,那么不必安装SQLite由于P ...

  7. 【转】树莓派学习笔记——I2C Tools 学习笔记

    原文网址:http://blog.csdn.net/xukai871105/article/details/15029843 1.安装     I2C驱动载入和速率修改请查看博文[树莓派学习笔记——I ...

  8. 【转】 树莓派学习笔记——I2C设备载入和速率设置

    原文网址:http://blog.csdn.net/xukai871105/article/details/18234075 1.载入设备 方法1——临时载入设备 sudo modprobe -r i ...

  9. 树莓派学习笔记——使用文件IO操作GPIO SysFs方式

    0 前言     本文描写叙述假设通过文件IO sysfs方式控制树莓派 GPIO端口.通过sysfs方式控制GPIO,先訪问/sys/class/gpio文件夹,向export文件写入GPIO编号, ...

随机推荐

  1. mockito中两种部分mock的实现,spy、callRealMethod

    什么是类的部分mock(partial mock)?A:部分mock是说一个类的方法有些是实际调用,有些是使用mockito的stubbing(桩实现). 为什么需要部分mock? A:当需要测试一个 ...

  2. 【COCOS2D-HTML5 开发之三】演示样例项目附源代码及执行的GIF效果图

    本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/cocos2d- ...

  3. SIX GOD

    SIX GOD是什么意思呢.?_百度知道 SIX GOD

  4. Andorid时间控件和日期控件

      

  5. Swift - 给图片添加文字水印(图片上写文字,并可设置位置和样式)

    想要给图片添加文字水印或者注释,我们需要实现在UIImage上写字的功能. 1,效果图如下: (在图片左上角和右下角都添加了文字.) 2,为方便使用,我们通过扩展UIImage类来实现添加水印功能 ( ...

  6. java学习笔记-继承中super关键字

    背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...

  7. Freemarker概念简单介绍

    Freemarker概念简单介绍 1.   Freemarker是什么 模板引擎:一种基于模板的,用来生成输出文本的通过工具. 基于java开发包和类库 2.   Freemarker能做什么 MVC ...

  8. 软考之路(四)---软件project一 概念模型,逻辑模型,物理模型

    自从接触到数据库到如今这三个概念大家理解的还有些不清楚,今天来为大家解答疑惑,共同提高,结合生活理解 概念模型        概念模型就是在了解了用户的需求,用户的业务领域工作情况以后,经过分析和总结 ...

  9. linux编程掌握常用命令

    1)编译应用程序 make -f makefile_5_2 clean make -f makefile_5_2 2)关于共享目录 在linux虚拟机的/mnt/hgfs下可看到该文件夹 3)cd命令 ...

  10. ASP.NET - 多级分类

    表结构: 表数据: 最终效果: 前端代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehin ...