linux 设置开机启动项两种方式
原文链接:http://blog.csdn.net/karchar/article/details/52489572
有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务。
在解问题之前先来看看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下查看目录结构的方法(linux查看目录结构)
- 探索Linux中设置当前路径的方法(linux设置当前路径)
- 使用Linux配置多网关的实践(linux多网关设置)
- Linux下设置交换分区的指南(linux设置交换分区)
- 者的受用:Linux操作系统的应用实践(linux实践)
- 服务器简易方式退出Linux远程服务器(linux退出远程)
- Linux 查看日志命令简明指南(linux看日志命令)
- Linux命令:删除文件的正确方式(删除文件linux命令)
- 设置Linux 内核优化:修改参数提升性能(linux的内核参数)
- 深入探索Linux系统编码设置(设置linux系统编码)
- Linux下编译安装MySQL教程(linux编译mysql)
- Linux系统漏洞扫描原理及其实施方法(linux漏洞扫描原理)
- Linux系统下,如何设置独立网卡?(linux独立网卡)
- 深入了解Linux下的端口号设置与管理(linux端口号)
- 构建高效安全的网络:打造Linux杀毒服务器(linux杀毒服务器)
- Linux切换至中文环境(linux设置成中文)
- Linux下给用户授权的简单命令(linux赋用户权限命令)
- Linux下使用FTP:实现文件传输的利器(linux下ftp的使用)
- Linux: 为用户提供不一样的体验(linux有什么用户)
- Linux下查看CPU信息的方法(linux下查cpu)
- 如何利用Linux进行文件校验: 25字教程(linux校验)
- Linux 下文件打开方式的选择与技巧(linux打开文件方式)
- 快速掌握Linux命令行IP地址配置(linux命令行设置ip)
- 理解 Linux 文件操作的权限设置(linux文件读写权限)
- Linux文件加固:使用密码保护你的数据(linux 文件设置密码)
- 学习Linux:安装源码包教程(linux安装源码包)
- 安卓与Linux:开启智慧新概念(安卓和linux)
- Linux下调节音量的正确方式(linux调节音量)