`
南望山下守望者
  • 浏览: 10279 次
  • 来自: 武汉
社区版块
存档分类
最新评论

Linux 自定义service启动

阅读更多
    大多数Linux开机自启动,都是把命令写到/etc/rc.d/rc.local或者 /etc/rc.local里,这样虽然能够实现随机运行,但是并不够灵活。不能像mysql,apache等服务一样能够使用service命令或者调 用init.d下的脚本启动、关闭或者重启进程。例如,

service mysql restart
service apache2 stop

或者

/etc/init.d/mysql restart
/etc/init.d/apache2 stop

编写一个启动控制脚本,以hxht为例,建立/etc/init.d/hxht文本文件,输入下面的内容:

复制代码
#!/bin/sh

case "$1" in
start)
start-stop-daemon --start --background --exec /home/fx/hxht.py
;;
stop)
start-stop-daemon --stop --name hxht.py
;;
restart)
start-stop-daemon --stop hxht.py
start-stop-daemon --start --background --exec /home/fx/hxht.py
;;
*)
echo "please use args: start stop restart!"
;;
esac
复制代码


这是一个简单的shell脚本,case .. in是用来根据调用参数进行不同的操作,start-stop-daemon是一个可以管理daemon进程的程序,要查看它的详细说明,可以运行man start-stop-daemon。start的时候,使用--exec指定要执行的文件,stop的时候,使用--name根据进程名字来使用 killall结束匹配的进程。

接着,设置脚本文件属性,设置可执行标记。

root@localhost:~# chmod 755 /etc/init.d/hxht

这样子,就可以使用service命令来启动和关闭进程了,例如启动进程如下:

root@localhost:~# service hxht start
root@localhost:~# ps aux|grep hxht
root       353  1.4  1.9   8644  5212 ?        S    09:50   0:00 /usr/bin/python /root/hxht.py
root       355  0.0  0.2   1900   596 pts/0    S+   09:50   0:00 grep --color=auto hxht
关闭进程,

root@localhost:~# service hxht stop
root@localhost:~# ps aux |grep hxht
root       365  0.0  0.2   1900   592 pts/0    S+   09:51   0:00 grep --color=auto hxht
到这里,一个Linux服务的进程控制脚本已经写好了,但是要实现随机启动,还需要一个步骤。
Linux开机的时候,不是直接运行/etc/init.d下的所有脚本的,而是根据不同的runlevel来执行/etc/rc$runlevel.d 下的脚本。这里的runlevel是用以区别系统的运行方式(例如单用户的runlevel,多媒体桌面的runlevel,服务器的runlevel都 不同)。

在Ubuntu里,可以使用update-rc.d来把/etc/init.d/hxht安装到各个runlevel中。更多关于update-rc.d的说明,请参见man update-rc.d。

root@localhost:~# update-rc.d hxht defaults 99
update-rc.d: warning: /etc/init.d/hxht missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
Adding system startup for /etc/init.d/hxht ...
   /etc/rc0.d/K99hxht -> ../init.d/hxht
   /etc/rc1.d/K99hxht -> ../init.d/hxht
   /etc/rc6.d/K99hxht -> ../init.d/hxht
   /etc/rc2.d/S99hxht -> ../init.d/hxht
   /etc/rc3.d/S99hxht -> ../init.d/hxht
   /etc/rc4.d/S99hxht -> ../init.d/hxht
   /etc/rc5.d/S99hxht -> ../init.d/hxht
update-rc.d后面有三个参数,分别是/etc/init.d下的脚本名字,默认安装方式,运行的优先级。优先级的数字越大,表示越迟运行,这里我们把自己写的服务放在最后运行。

如果要卸载随机启动的服务,执行

update-rc.d -f hxht remove

在update-rc.d安装的时候提示了警告信息,是因为我们写的/etc/init.d/hxht太简陋了,连LSB的信息也没有提供。

update-rc.d: warning: /etc/init.d/hxht missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>

只需要做一些小改动,就可以避免那个警告了。如下:

#!/bin/sh
### BEGIN INIT INFO
# Provides: hxht
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start or stop the hxht service
### END INIT INFO

case "$1" in
start)
start-stop-daemon --start --background --exec /home/fx/hxht.py
;;
stop)
start-stop-daemon --stop --name hxht.py
;;
restart)
start-stop-daemon --stop hxht.py
start-stop-daemon --start --background --exec /home/fx/hxht.py
;;
*)
echo "please use args: start stop restart!"
;;
esac

到此,一个最简单的随机启动服务写好了,看起来文章挺长的,但其实也就几个命令而已。
在下次开机启动的时候,hxht.py就会以root用户身份被自动运行。



现在,你应该知道怎么编写属于自己的service命令了吧,编写一个脚本,然后把它放在/etc/init.d这个目录底下,你就可以用service +脚本名字 运行它。如果是要开机自动启动那就得用chkconfig命令了。

注意:

A、service这个命令往往是即时生效,不用开关机,但是重启后服务会回到默认状态。

B、chkconfig是用于把服务加到开机自动启动列表里,只要启动它,就能自动启动,重启后永久生效

即:chkconfig --add COMMAND

    chkconfig COMMAND on/off    重启后永久生效
分享到:
评论

相关推荐

    Centos7-Systemd-Service自定义编写Service应用服务配置说明整理.docx

    `[Service]` 部分定义了服务的配置信息,包括服务类型、PID 文件、环境变量、启动命令、停止命令、超时时间等。 `[Install]` 部分定义了服务的安装信息,包括服务的依赖关系等。 服务管理命令 systemd 服务提供了...

    Apache自动启动及添加为Linux的服务 ZT

    总之,将Apache配置为Linux启动服务并使用自定义脚本可以提高自动化程度和用户体验。通过遵循上述步骤并参考提供的博客文章,你可以实现这一目标。不过,请确保对所做的任何修改进行备份,并谨慎操作,以免影响系统...

    Self-Service Linux 讲解内核问题定位的书

    《Self-Service Linux》这本书专注于Linux内核问题的定位与解决,是Linux系统管理员和开发者的重要参考资料。在深入探讨这个主题之前,我们首先需要理解Linux内核的基本概念以及它在操作系统中的核心作用。 Linux...

    linux-oracle环境变量及自启动脚本

    6. init.d脚本:在Red Hat或CentOS等Linux发行版中,可以创建一个位于/etc/init.d下的Oracle启动脚本,通过`chkconfig --add`使其成为系统服务,然后通过`service oracle start`进行启动。 7. systemctl或systemd...

    systemd添加自定义系统服务设置自定义开机启动的方法

    在Linux系统中,`systemd` 是一种初始化系统,负责管理系统启动后的各种服务。`systemd` 提供了一种方便的方式来管理自定义的系统服务,包括设置它们在开机时自动启动。以下是如何使用`systemd`添加自定义系统服务并...

    linux各自启动配置脚本简介

    - **rc.local**:尽管不是官方的标准,`/etc/rc.d/rc.local` 文件经常被用于执行自定义的启动任务。由于它的简单性和灵活性,许多系统管理员喜欢使用它来添加额外的启动步骤。 - **实现方式**:可以通过创建符号链接...

    mysql自定义启动

    MySQL数据库是世界上最受欢迎的开源关系型数据库之一,其自定义启动功能对于系统管理员和开发者来说非常重要,因为它允许根据特定需求调整服务器配置。本篇文章将深入探讨如何进行MySQL的自定义启动,以及`my.cnf`...

    Linux DB29.5 开机自启动

    这些脚本可以作为参考,帮助理解如何自定义和优化DB2的启动过程。务必根据实际的系统环境和DB2安装路径调整这些脚本。 总之,配置Linux上的DB2 9.5开机自启动涉及创建系统服务、设置启动级别和编写执行脚本。通过...

    linux开机启动tomcat或者java程序

    - 在`/etc/systemd/system`目录下创建一个自定义的服务单元文件,例如`tomcat.service`,内容如下: ```ini [Unit] Description=Apache Tomcat Web Application Container After=network.target remote-fs....

    linux设置服务开机自启动的方法

    2. **rc.local**: `rc.local`是Linux启动过程中执行的一个脚本,位于`/etc/rc.local`,用于执行系统启动后的自定义命令。你可以在这个脚本中添加启动服务的命令,例如`/etc/init.d/mysqld start`,这样每次系统启动...

    linux下启动多个不同版本的mysql服务.pdf

    这种方法允许更多的自定义配置,但需要更多的系统资源和时间。 2. 配置独立的数据目录 - 每个版本的MySQL需要有自己的数据目录,这样它们的数据文件、日志文件等不会混淆。可以通过设置`--datadir`参数在安装时...

    Linux 配置 tomcat 开机启动.txt

    - 最后,可以通过 `service tomcat start` 命令来启动 Tomcat,或通过 `service tomcat stop` 命令来停止它。 #### 注意事项 - 确保 `startup.sh` 和 `shutdown.sh` 文件具有可执行权限。 - 根据实际情况调整 `...

    Linux 开机(服务、脚本)启动顺序.docx

    在 Linux 系统中,我们可以自定义启动脚本,例如: 1. 开机以 root 权限执行脚本,修改 /etc/rc.d/rc.local 文件。 2. 用户登录时执行脚本,如设置一些环境变量,修改 /etc/profile 文件。 3. 特定用户登录时执行...

    精品专题(2021-2022年收藏)Linux开机自动启动脚本方法.doc

    3. **Systemd Services**:随着Systemd成为现代Linux发行版的标准初始化系统,你可以创建一个`.service`单元文件放入`/etc/systemd/system/`目录,然后使用`systemctl enable`命令使其开机启动,`systemctl start`...

    Linux 下设置oracle 10g 自动启动服务

    ### Linux 下设置 Oracle 10g 自动启动服务 #### 方法一:通过配置 `/etc/rc.d/init.d/` 目录下的服务文件实现自动启动 1. **创建服务文件** 在 `/etc/rc.d/init.d/` 目录下创建一个名为 `oracle10g` 的文件,并...

    linux学习-将seafile启动脚本设置为开机启动服务.docx

    在Linux环境下,很多软件或程序并非通过包管理工具(如`yum`或`apt-get`)安装,而是通过编译或其他自定义方式进行部署。这种方式虽然提供了更高的灵活性,但也带来了配置上的复杂性,特别是如何确保这些非标准安装...

    在Linux操作系统中通过systemctl设置nginx开机自动启动步骤

    在Linux操作系统中,管理服务的常用工具是`systemd`,它允许系统管理员控制服务的启动、停止、重启以及设置开机自启动。针对Nginx这种常见的Web服务器,确保其在服务器重启后能够自动启动是非常重要的,可以避免服务...

    在linux下如何设置开机自动启动程序.pdf

    `/etc/rc.d/rc.local` 是一个传统的方法,它在系统启动的最后阶段执行,允许用户添加自定义的启动脚本。例如,要在系统启动时启动Apache服务器,可以在这文件中添加 `/usr/local/httpd/bin/apachectl start` 命令。...

    plymouth脚本语言简介

    它允许开发者创建自定义的启动和关机画面,包括文本信息、图像以及动画效果。通过编写Plymouth脚本,你可以控制显示的文本、颜色、背景、帧率等元素,实现完全个性化的启动体验。 在"plymouth脚本语言简介"中,你将...

    Linux 添加开机启动方法(服务/脚本)

    本文将详细介绍三种在Linux中添加开机启动的方法,包括修改`/etc/rc.local`文件、编写自定义脚本以及创建自定义服务文件并通过`systemctl`管理。 ### 1. 修改`/etc/rc.local`文件 `/etc/rc.local`是Linux系统的一...

Global site tag (gtag.js) - Google Analytics