avatar1 avatar
@{[{user.name}]}
希腊·圣域
since February 1500

Ubuntu随机启动脚本

前段时间把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  

注意: 脚本开始处与### BEGIN INIT INFO 和 ### END INIT INFO 之间的#并不是注释,其余的#为注释。

Provides即这个脚本的名字,可以随便取一个

Required-Start 这个是需要再执行我们的脚本前必须先自行的脚本,例如如果你的脚本需要数据库支出,那么你必须在这里指定数据先启动例如mysql

Required-Stop 同上,只是换为停止时

几个关键的配置信息就完成了,下一步就需要把这个配置信息写入系统的启动顺序。

将脚本加入系统启动序列

  • 将该脚本say_hello复制到 /etc/init.d/
  • 赋予可以执行权限 chomd 755 /etc/init.d/say_hello
  • 添加到序列 update-rc.d say_hello defaults

这样下次启动服务器的时候该脚本就会随机启动。