avatar1 avatar
@{[{user.name}]}
希腊·圣域
since February 1500
Ubuntu随机启动脚本 13 August 2016 04:00:59

前段时间把web应用发布到了ubuntu服务器,除此之外该服务器上还运行着几个python的脚本,每次做完安全更新之后都需要重新启动web应用和脚本,就配了一个随机启动的脚本,今天整理出来吧。

有好几个办法可以实现这个目的,这里我使用的是LSB init script的办法

什么是LSB

LSB的全称是Linux Standard Base, 从名称可以看出它是一个标准化的东西,linux有很多的发型版本,每个发型版本不尽相同,如果没有一套标准的东西约束这么多发型版本,那么开发者无法保障他们可以写出一种脚本在任何发型版本上都没有问题,为解决这个问题一个标准LSB就诞生了,LSB实际上描述了一组任何发型版本必须实现的API。

什么是LSB Init Script

用标准的API设计的初始化脚本

如何使用LSB Init Script

直接举例来讲吧,例如我想我的机器reboot的时候自动运行~/sayHello.py 的脚本.

首先创建一个脚本文件 say_hello (没有拓展名)

#!/bin/bash

### BEGIN INIT INFO
# Provides:          say_hello
# Required-Start:    $network
# Required-Stop:     $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Short description
# Description:          Full description
### END INIT INFO

start() {  
 nohup python ~/sayHello.py & #后台运行脚本
}

stop() {  
  #do nothing
}

case $1 in  
  start|stop) $1;;
  restart) stop; start;;
  *) echo "Run as $0 <start|stop|restart>"; exit 1;;
esac

之前有一次启动tocmat之后无法访问页面,并且也没有任何错误信息输出,但奇怪的发现有些启动日志并没打印完全,后来等了5分钟左右的时候日志就全部打印完了,tomcat也变得可以访问了,但是足足等了5分钟。

出现这个问题的原因是Tomcat 版本非常依赖于SecureRandom这个类去生成随机的串用作seesion ids等等,而SecureRandom依赖于熵(entropy)的输入。

熵(entropy)是描述系统混乱无序程度的物理量

如果系统熵过低,tomcat启动过程中(加密程序)就会等待系统产生足够的熵才进行一下一步启动从而导致启动过程变慢。

所以解决方案就是指定一个非空的熵(entropy)给SeureRandom。

方案1:

-Djava.security.egd=file:/dev/./urandom

方案2 (推荐):

apt-get install haveged  

Haveged 的目的是提供一个简单易用的不可预测随机数生成器,基于 HAVEGE 算法。Haveged 可以解决在某些情况下,系统熵过低的问题。

使用下面命令查看当前系统收集到的熵,如果低于1000那么说明系统的熵比较底,那么最好能够安装haveged

cat /proc/sys/kernel/random/entropy_avail

当前第 1页,一共 1页