linux下添加简单的开机自启动脚本

摘要:
在使用Linux的过程中,我们经常遇到需要设置自定义应用程序以自动启动以节省操作时间的问题。这里有两种自动设置引导的方法。钢筋混凝土。local将引导自动启动程序ubuntu添加到rc中。本地脚本。在引导过程之后,/etc/rc中的脚本程序。将执行本地文件。最初,文件内容如下:downey@ubuntu:~$cat/etc/rc。本地#!/bin/sh-e##rc.local##此脚本在每个多用户运行级别结束时执行。#确保脚本在成功或无错误时“exit0”。##为了启用或禁用此脚本,只需更改执行#位。##默认情况下,此脚本不起作用。它不包括其他内容。用户可以添加要在启动时执行的脚本命令。以diodon粘贴板工具为例。如果我想启动并运行diodon进程,请在文本中添加以下内容:downey@ubuntu:~$cat/etc/rc.local#!

在linux的使用过程中,我们经常会碰到需要将某个自定义的应用程序设置为开机自启动以节省操作时间,这里提供两个设置开机自启动的方法。

注:博主使用的ubuntu-16.04进行实验,其它版本可能有偏差,但实现原理类似。

rc.local

在rc.local脚本中添加开机自启动程序

ubuntu在开机过程之后,会执行/etc/rc.local(注意/etc/init.d中也有个rc.local,不要弄混了)文件中的脚本程序,初始情况下,这个文件内容是这样的:

downey@ubuntu:~$ cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.  

并不包含其它内容,用户可以在里面添加需要开机执行的脚本命令,这里以diodon粘贴板工具为例,如果我要开机运行diodon进程,在文本中添加:

downey@ubuntu:~$ cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
./usr/bin/diodon &
exit 0

看到这里有些盆友就要问了,为什么要在执行命令后面加&?

在shell执行命令后加&是为了让应用程序在后台运行,rc.local也是一个脚本,主进程在运行这个脚本时必须能够返回,如果在这个脚本里面执行了一些死循环或者其他无法返回的任务,整个系统就很可能卡死在这里,无法启动,所以在这里运行的用户程序必须是能够返回或者本身就使用一些后台运行的进程。

经过上面的添加,在下次重启的时候,使用命令:

downey@ubuntu:~$ ps -ef |grep "diodon"
downey     2097   1880  0 22:53 ?        00:00:04 diodon
downey     2937   2842  0 23:27 pts/2    00:00:00 grep --color=auto diodon  

就可以看到diodon进程已经在后台运行。

删除

既然有添加,就必须得有删除,其实以rc.local的删除方式很简单,直接删除rc.local中用户添加的部分即可。

需要提醒的是,在操作系统文件时,做备份是非常必要的

将用户脚本添加到/etc/init.d中

添加用户进程

第二种方式就是将自己的用户脚本添加到/etc/init.d并链接到自启动程序当中。

还是以tomcat服务来举例,我编辑一个运行tomcat的脚本:

#!/bin/bash
#
# tomcat startup script for the Tomcat server
#
#
# chkconfig: 345 80 20
# description: start the tomcat deamon
#
# Source function library
. /etc/rc.d/init.d/functions

prog=tomcat8
JAVA_HOME=/www/server/jdk1.8.0_291/  # 根据自己的路径改写JAVA_HOME
export JAVA_HOME
CATALANA_HOME=/www/server/tomcat8/   # 根据自己的路径改写CATALANA_HOME
export CATALINA_HOME

case "$1" in
start)
    echo "Starting Tomcat..."
    $CATALANA_HOME/bin/startup.sh
    ;;

stop)
    echo "Stopping Tomcat..."
    $CATALANA_HOME/bin/shutdown.sh
    ;;

restart)
    echo "Stopping Tomcat..."
    $CATALANA_HOME/bin/shutdown.sh
    sleep 2
    echo
    echo "Starting Tomcat..."
    $CATALANA_HOME/bin/startup.sh
    ;;

*)
    echo "Usage: $prog {start|stop|restart}"
    ;;
esac
exit 0

将其命名为tomcat,并用指令:

chmod +x tomcat #加执行权限(也可复制到/etc/init.d/目录后添加)
sudo cp tomcat /etc/init.d/  

将文件放到/etc/init.d目录中,然后将tomcat脚本链接到开机运行序列中:

chkconfig --add tomcat  #添加到开机启动
chkconfig --del tomcat #移除开机启动列表
chkconfig #查看开机启动
#更多chkconfig命令和开机启动级别 可以自行搜索

systemd的开机自启动

上面提到的两种方式适用于经典的system V控制系统启动和关闭的情况,但是目前(2018年10月)在大多数发行版上都开始使用了systemd的系统软件控制方式,包括Ubuntu16,centos.systemd系统管理着linux下的进程运行,属于应用程序,不属于linux内核的范畴。

在systemd系统上设置开机自启动的方式也是非常简单的(尽管systemd这套软件管理工具并不简单)。

确定系统是否应用了systemd工具来管理

这里要注意的是,systemd是linux发行版上的预装工具,用来管理系统软件的启动运行和结束,所以通常来说,这套东西是依赖于发行版的,如果系统使用了这一套工具,那么就可以使用它来管理进程,如果不是,即使你安装了它,它也不会被默认配置为系统管理工具。

查看系统是否使用systemd工具我们可以使用如下的指令:

systemd --version

如果系统返回如下类似的信息,表明该系统是由systemd工具来管理软件:

systemd 232
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN

systemctl的使用

对软件的管理主要是同通过systemd工具中的systemctl命令,相比于之前的system V的控制方式,systemd显得更加简洁明了,对用户更加友好,拿httpd来举例:

开启httpd服务:
sudo systemctl start httpd
设置httpd服务自启动:
sudo systemctl enable httpd

至于关闭和取消自启动,大家心里应该有数了吧。

设置开机自启动

我们再回到重点,设置开机自启动。

我们要为目标设置一个配置文件,其实这是可以预想到的,linux作为一个复杂的系统,开机自启动涉及到的依赖、运行级别、运行环境等等问题肯定需要用户去指定,在启动的时候系统才知道怎么正确地去运行软件。这个配置文件固定以.service作为后缀,比如我们如果要运行/home/downey目录下的test.sh脚本,我们可以添加一个配置文件test.service:

[Unit]
Description=
Documentation=
After=network.target
Wants=
Requires=

[Service]
ExecStart=/home/downey/test.sh
ExecStop=
ExecReload=/home/downey/test.sh
Type=simple

[Install]
WantedBy=multi-user.target

将文件放在/usr/lib/systemd/system 或者 /etc/systemd/system目录下,然后可以测试一下:

sudo systemctl start test.service  

然后你可以查看你的/home/downey/test.sh脚本是否已经运行,如果已经运行表示配置文件没有问题。然后可以键入:

sudo systemctl enable test.service  

设置test脚本开机启动。如果上一步没有出问题,这一步基本上也不会有什么问题,系统会打印出如下信息:

Created symlink /etc/systemd/system/multi-user.target.wants/test.service → /usr/lib/systemd/system/test.service.  

可以看到,这里在/etc/systemd/system/multi-user.target.wants/目录下创建了一个/usr/lib/systemd/system/test.service文件的软链接,到这里设置开机自启动就完成了。

 

配置文件的简单解析

在上面的配置文件中,为了演示起见,我将一些本测试脚本不需要但是比较重要的配置项也写了出来,其实如果不需要可以删除,但是[Unit]/[Service]/[Install]这三个标签需要保留。
我们来一个个简单介绍一下配置项:

Description:运行软件描述
Documentation:软件的文档
After:因为软件的启动通常依赖于其他软件,这里是指定在哪个服务被启动之后再启动,设置优先级
Wants:弱依赖于某个服务,目标服务的运行状态可以影响到本软件但不会决定本软件运行状态
Requires:强依赖某个服务,目标服务的状态可以决定本软件运行。
ExecStart:执行命令
ExecStop:停止执行命令
ExecReload:重启时的命令
Type:软件运行方式,默认为simple
WantedBy:这里相当于设置软件,选择运行在linux的哪个运行级别,只是在systemd中不在有运行级别概念,但是这里权当这么理解。 

如果有多项,用逗号作为分隔。

转 : https://www.cnblogs.com/downey-blog/p/10473939.html

免责声明:文章转载自《linux下添加简单的开机自启动脚本》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇kettle系列1.kettle源码获取与运行程序破解之 API HOOK技术 z下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

解决Linux服务器更换IP后,ssh连接被拒绝问题

解决Linux服务器更换IP后,ssh连接被拒绝问题     解决更换Linux服务器IP后,ssh登录报“ssh: connect to host xxx port 22: Connection refused”错误     由于之前服务器的sshd服务一直正常,但更换IP后通过putty进行登录,报“连接被拒绝”异常     一、重启sshd服务,查看...

linux概念之内存分析

linux内存总结 分析样本[root@221-comecs ~]# free total used freeshared buffers cached Mem: 1019820 782912 236908 0 54104 60...

Linux(centos)新建,删除,移动,重命名文件夹和文件的命令

1.新建文件夹 mkdir 文件名 新建一个名为test的文件夹在home下 view source1 mkdir /home/test 2.新建文本 在home下新建一个test.sh脚本  vi /home/test.sh 3.删除文件或文件夹 1、删除home目录下的test目录  rm /home/test 2、这种不带参数的删除方法经常会提示无法...

Linux内核调试方法总结之栈帧

栈帧 栈帧和指针可以说是C语言的精髓。栈帧是一种特殊的数据结构,在C语言函数调用时,栈帧用来保存当前函数的父一级函数的栈底指针,当前函数的局部变量以及被调用函数返回后下一条汇编指令的地址。如下图所示:                         栈帧位于栈内存中,接下里我们用一个实例展示一下栈帧的入栈和退栈过程。  stackframe.c #incl...

安装centos7模板机[正常版]

1. 安装centos 7模板机 准备好centos7的镜像 下载地址:http://mirrors.aliyun.com/centos/7/isos/x86_64/ 安装centos 自定义硬件: 对硬件进行一些修改 支持虚拟化 开启虚拟化支持: 配置完成后 点击确定 然后开机 将这段文字修改为: vmlinuz initrd=i...

QEMU简单使用

Qemu使用手册快速启动在我们下载并解压linux镜像(linux.img)以后,我们可以输入下面的命令来启动:qemu linux.img这样Linux就会启动并会展示给我们一个提示.调用用法:qemu [option] [disk_image]disk_image是代表IDE的硬盘的硬盘镜像.一般选项:-M machine 选择模拟的机器(我们可以输入...