Ubuntu Service说明与使用方法
1 什么是Ubuntu的Service
网上很多资料说, service就是linux中随开机自启动的, 并且在后台运行的程序. 个人认为, 至少对于Ubuntu来说, 这个说法是不太准确的, 这只不过是一种大家使用上的习俗而已. 起始, Service既不一定在后台运行, 也不一定随开机自启动.
举例说明: 比如我们在终端键入: sudo service apache2 restart来重启apache服务, 本文介绍的Service, 指的是这里的这个service.
那么什么是service呢?
按照man service的说明, service本身是个命令, 这个service命令是用来启动service服务的, 其语法格式为:
service SCRIPT COMMAND [OPTIONS]
其解释为: service运行一个位于/etc/init.d/下的脚本SCRIPT, 或者是一个位于/etc/init下upstart程序. upstart是ubuntu中用来代替以前的sysvinit的启动程序(笔者猜测可能是由于以前svsvinit中叫做startup, 所以现在较upstart).
本文先介绍/etc/init.d下的服务, 说明一下怎么手动的添加一个服务, 并且让它自启动(如果你需要的话). 本文这是简单并且直观的介绍一下service, 并不一定所有概念都准确, 如果读者想要更加准确的概念和更加全面的方法, 可以网上自己搜, 遍地都是.
2 手动添加一个服务
基于上面的解释, 其实添加一个服务很简单, 只需要添加一个脚本到/etc/init.d/并赋予它可执行权限即可. 如:
sudo touch /etc/init.d/hello
chmod +x /etc/init.d/hello
这是ubuntu就认为有个叫hello的服务了. 可以试试键入sudo service hell 再敲TAB键, 这时候应该就可以tab出来hello了, 这说明系统已经识别出来它是一个服务了. 如果此时报错: hello.service not found, 则可能需要执行一下:
sudo update-rc.d hello defaults
下面来测试一下, 在hello中加入一行:
#!/bin/bash
echo "hello"
第一行的"#!/bin/bash"一定要有, 否则有可能会报错.
然后运行命令:
sudo service hello start
这时便会打印输出hello(如果没有打印可以尝试用sudo systemctl status sss.service查看). 如果hello中的命令为echo "hello" $1, 则会打印hello start. 可见, 我们平时输入的sudo service xxx start中的start, 也就是man中说的COMMAND, 只不过是service传给xxx服务的第一个参数而已.
至此, 我们已经有了一个可以简单显示hello的服务, 但是它不会自动启动, 这就如前文所说的, 服务不一定非要随开机自启动的. 后文会介绍如何添加自启动.
3 service start / stop
下面我们介绍如何添加service的start / stop等, 其实很简单, 只需要在上文所建的/etc/init.d/hello加入:
case "$1" in
start)
echo start
;;
stop)
echo stop
;;
restart)
echo restart
;;
esac
在对应的case中进行想要的工作即可.
4 控制服务的自启动
4.1 说明
简单的说, 要让服务的自启动, 只需要在/etc/rc{RUNLEVEL}.d/中加入S12ServiceName的软链接, 指向/etc/init.d中对应的脚本(如本文的hello). 这里先且看说明, 稍后会介绍方法而不用手动一个个的添加:
说明:
- S12ServiceName中:
- 表示该服务随启动自动启动, 如果是K, 则表示Kill(杀死进程);
- 12表示优先级, 数越小, 越是先执行.
- ServiceName即服务名, 起始叫什么都行, 真正起作用的是软链接的目标, 不过一般最好与服务同名.
- 其中的RUNLEVEL为系统的运行级别, 一般的linux分8个级别: 0-6和一个'S'级别.
- 0代表关机(halt);
- 6代表重启(restart);
- 1级别是单用户模式(single),
- 2-5各有不同. 但是在userlinux(包括ubuntu)中2-5级别是毫无差别的.
- 'S'级别是一个比较特殊的级别, 他应该是先于其他级别运行的级别(这一点有待考证).
这里说明一下, 0-6级别的运行是互斥的, 而不是叠加运行, 也就是说如果进入(move into)4级别, 不是指0-3都要运行, 而只是完成4级别里所规定的服务.
如果要查看系统当前的运行级别可以使用命令:
runlevel
显示的数字就是当前运行级别, 一般ubuntu桌面版在我们平时使用时进入的应该是level 2.
4.2 使用update-rc.d添加自启动
虽然可以按照上文方法来手动添加, 但是更简单的是使用update-rc.d命令来添加. 如:
sudo update-rc.d hello defaults
如果要删除这个服务, 则:
sudo update-rc.d hello remove
可以看到, 运行添加时, 终端会显示:
update-rc.d: warning: /etc/init.d/hello missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
Adding system startup for /etc/init.d/hello ...
/etc/rc0.d/K20hello -> ../init.d/hello
/etc/rc1.d/K20hello -> ../init.d/hello
/etc/rc6.d/K20hello -> ../init.d/hello
/etc/rc2.d/S20hello -> ../init.d/hello
/etc/rc3.d/S20hello -> ../init.d/hello
/etc/rc4.d/S20hello -> ../init.d/hello
/etc/rc5.d/S20hello -> ../init.d/hello
然后就可以看到在上述列表中的各个级别下, 创建了对应的软链接.
remove方法如果/etc/init.d/脚本还存在, 则需要使用-f参数:
sudo update-rc.d -f hello remove
这样会删除各个软链接, 但是并不会删除/etc/init.d/下的脚本本身.
Ubuntu Service说明与使用方法的更多相关文章
- ubuntu设置不睡眠的方法
Ubuntu系统不睡眠设置方法:要完成这个设置Ubuntu有两种方法:第一种是打开 System Settings –> Power,中文版是打开系统设置 -> 电源),然后进行设置.但不 ...
- CTFd+ubuntu service搭建等待更新
CTFd是一款基于Apache2.0的协议的开源CTF平台,最新版本目前为1.20.该平台功能强大,基本上能够满足目前的CTF竞赛需求,同时,该平台提供了强大的插件功能,可以自己进行插件开发实现自己的 ...
- ubuntu下面更改用户名的方法
在装HADOOP 系统时候不小心, 没有将三台机器的用户名设置为一致的用户名,导致后面发生很多麻烦.下面总结一下UBUNTU中改用户名的方法. 1. 先给系统添加一个super用户,我们用这个用户名 ...
- ubuntu一些基本软件安装方法
ubuntu一些基本软件安装方法 首先说明一下 ubuntu 的软件安装大概有几种方式:1. deb 包的安装方式deb 是 debian 系 Linux 的包管理方式, ubuntu 是属于 deb ...
- 用户 NT AUTHORITY\NETWORK SERVICE 登录失败 解决方法(转载)
用户 NT AUTHORITY\NETWORK SERVICE 登录失败 解决方法 (MS SQL 2005) Windows server 2003,2008 Web.Config 配置连接sql ...
- [转]ubuntu 12.04添加launcher方法
[转]ubuntu 12.04添加launcher方法 http://www.cnblogs.com/Jerryshome/archive/2012/08/21/2649500.html 对ubunt ...
- [转]win7+ubuntu 13.04双系统安装方法
win7+ubuntu 13.04双系统安装方法 http://jingyan.baidu.com/article/60ccbceb18624464cab197ea.html 当需要频繁使用ubunt ...
- 安装tomcat出现failed to install tomcat8 service错误及解决方法
failed to install tomcat8 service 如下图所示: 一.安装tomcat出现failed to install tomcat6 service错误及解决方法(转载 ...
- win7+ubuntu 13.04双系统安装方法
转自:http://jingyan.baidu.com/article/60ccbceb18624464cab197ea.html 当需要频繁使用ubuntu时,vmware虚拟机下运行ubuntu, ...
随机推荐
- LeetCode 182. Duplicate Emails (查找重复的电子邮箱)
题目标签: 题目给了我们一个 email 的table,让我们找到重复的 email. 可以建立 Person a, Person b, 找到两个表格中,emai 相等 但是 id 不同的 email ...
- mysql查看数据库大小或者表大小
要想知道每个数据库的大小的话,步骤如下: 1.进入information_schema 数据库(存放了数据库的信息) use information_schema; 2.查询所有数据库的大小: sel ...
- jQuery 快捷操作
快捷操作 1. class属性值操作 $().attr(‘class’,值); $().attr(‘class’); $().removeAttr(‘class’); //删除class的所有属性 ...
- decimate、end、interp、resample工具箱函数
- express 创建项目
express 创建项目: 1.熟悉express命令 2.创建模板 3.安装组件
- linux mysql主从复制配置
1.设置主库master的servie-id值并且开启bin-log功能参数vi /etc/my.cnf修改my.cnf的参数:[mysqld]server-id=1 //每一个库的server-id ...
- SpringMVC向前台传输 JSON数据
所需Jar包jackson-core.jackson-annotations和jackson-databind 在MVC的配置文件中加入<mvc:annotation-driven>< ...
- 2018-10-8-3分钟教你搭建-gitea-在-Centos-服务器
title author date CreateTime categories 3分钟教你搭建 gitea 在 Centos 服务器 lindexi 2018-10-08 09:54:39 +0800 ...
- C 二维数组与指针
http://c.biancheng.net/view/2022.html 1. 区分指针数组和数组指针 指针数组:存放指针的数组,如 int *pstr[5] = NULL; 数组中每个元素存放的是 ...
- python 九九乘法口诀
for i in range(1,10): for j in range(1,i+1): print(j,"*",i,"=",i*j,&qu ...