linux 设置开机启动项两种方式
2016-09-12 23:50
267 查看
有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务。
在解问题之前先来看看Linux的启动流程
主要顺序就是:
1. 加载内核
2. 启动初始化进程
3. 确定运行级别
4. 加载开机启动程序
5. 用户登录
启动流程的具体细节可以看看Linux 的启动流程
第4步加载启动程序其实是两步:
init进程逐一加载开机启动程序,其实就是运行指定目录里的启动脚本。
在运行完指定目录里面的程序后init进程还会去执行/etc/rc.local 这个脚本。
ps:“指定目录”是指在第3步中设置的运行级别对应的目录。
要完成我们的需求,我们使用第4步中的任意一种方式都可以。
下面分别就是这两种方式的具体实现:
第1步:把上面的脚本放在/etc/init.d/文件夹下。
第2步:将启动脚本权限改为可执行。
第3步:添加启动项。
第4步:检查是否设置成功。
成功~
echo “hello linux” >>/tmp/hello2.log ,就模拟了一个简单的开机启动脚本。
influxd 则就是启动 influxd 服务。
ps:
influxd和前面的
这个着实坑了我一把,当时我写的是:
发现influxd启动成功了,telegraf就是起不来。后来把telegraf写在前面就能起来,但是influxd又起不来了于是就猜测是这个原因~~~bingo。
在解问题之前先来看看Linux的启动流程
Linux的启动流程
主要顺序就是:
1. 加载内核
2. 启动初始化进程
3. 确定运行级别
4. 加载开机启动程序
5. 用户登录
启动流程的具体细节可以看看Linux 的启动流程
第4步加载启动程序其实是两步:
init进程逐一加载开机启动程序,其实就是运行指定目录里的启动脚本。
在运行完指定目录里面的程序后init进程还会去执行/etc/rc.local 这个脚本。
ps:“指定目录”是指在第3步中设置的运行级别对应的目录。
要完成我们的需求,我们使用第4步中的任意一种方式都可以。
下面分别就是这两种方式的具体实现:
1.chkconfig
以supervisord服务脚本为例:#!/bin/sh ## ## /etc/rc.d/init.d/supervisord ## #supervisor is a client/server system that # allows its users to monitor and control a # number of processes on UNIX-like operating # systems. # # chkconfig: - 64 36 # description: Supervisor Server # processname: supervisord # Source init functions . /etc/rc.d/init.d/functions prog="supervisord" prefix="/usr/" exec_prefix="${prefix}" PIDFILE="/var/run/supervisord.pid" CONFIG="/etc/supervisord.conf" prog_bin="${exec_prefix}bin/supervisord -c $CONFIG " function log_success_msg() { echo "$@" "[ OK ]" } function log_failure_msg() { echo "$@" "[ OK ]" } start() { #echo -n $"Starting $prog: " #daemon $prog_bin --pidfile $PIDFILE #[ -f $PIDFILE ] && success $"$prog startup" || failure $"$prog failed" #echo if [ ! -r $CONFIG ]; then log_failure_msg "config file doesn't exist (or you don't have permission to view)" exit 4 fi if [ -e $PIDFILE ]; then PID="$(pgrep -f $PIDFILE)" if test -n "$PID" && kill -0 "$PID" &>/dev/null; then # If the status is SUCCESS then don't need to start again. log_failure_msg "$NAME process is running" exit 0 fi fi log_success_msg "Starting the process" "$prog" daemon $prog_bin --pidfile $PIDFILE log_success_msg "$prog process was started" } stop() { echo -n $"Shutting down $prog: " [ -f $PIDFILE ] && killproc $prog || success $"$prog shutdown" echo } case "$1" in start) start ;; stop) stop ;; status) status $prog ;; restart) stop start ;; *) echo "Usage: $0 {start|stop|restart|status}" ;; esac
第1步:把上面的脚本放在/etc/init.d/文件夹下。
ln -s ./supervisord /etc/init.d/supervisord
第2步:将启动脚本权限改为可执行。
chmod a+x /etc/init.d/supervisord
第3步:添加启动项。
chkconfig --add supervisord chkconfig supervisord on
第4步:检查是否设置成功。
chkconfig --list | grep supervisord supervisord 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
成功~
2.修改/etc/rc.local脚本
/etc/rc.local 脚本内容如下#!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. #touch /var/lock/subsys/local echo "hello linux" >> /tmp/hello2.log influxd > /tmp/influxd.log 2>&1 & echo "hello linux" >> /tmp/hello3.log
echo “hello linux” >>/tmp/hello2.log ,就模拟了一个简单的开机启动脚本。
influxd 则就是启动 influxd 服务。
ps:
influxd > /tmp/influxd.log 2>&1 &这样写的意思是让influxd后台执行。
influxd和前面的
echo "hello linux"是不一样的,echo 执行过后就结束了,而influxd则为服务一直执行,如果不后台执行的话则influxd 启动后就不会返回,那么init进程就会一直等待influxd执行完毕,导致后面的程序一直无法执行。
这个着实坑了我一把,当时我写的是:
#!/usr/bin/python ... influxd telegraf
发现influxd启动成功了,telegraf就是起不来。后来把telegraf写在前面就能起来,但是influxd又起不来了于是就猜测是这个原因~~~bingo。
相关文章推荐
- linux 设置开机启动项两种方式
- Linux反空闲设置的两种方式
- linux ip限制的两种设置方式
- Linux下设置环境变量的两种常用方式
- 更改“.NET研究”SharePoint 的web.config设置的两种方式
- vmware_linux 的网络联接设置(NAT方式)
- Linux下socket设置为非阻塞方式和fcntl系统调用
- LINUX设置环境变量的三种方式
- linux 下启动tomcat的两种方式(-你的样子)
- Android全屏设置的两种方式
- 虚拟机Vmware下 linux上网设置 (bridged NAT 方式) +图解
- linux 下如果系统的init 被设置为6及重启模式解决进入系统方式
- U-boot mkimage指定Linux内核地址时的两种方式
- Apache+Tomcat负载均衡两种session共享方式的设置
- 一起谈.NET技术,更改SharePoint 的web.config设置的两种方式
- Linux下设置桌面快捷方式
- VS2005配置IDE设置的两种方式
- Linux2.6 模块的两种编译方式
- Linux 虚拟机 NAT方式上网设置
- Linux下修改网络设置的三种方式