ubuntu创建服务程序

方式一:

创建任务脚本test,放到/etc/init.d目录下
test:包含start、stop、stauts、restart

示例如下:

	#!/bin/sh
	#===启动相关信息===
	### BEGIN INIT INFO
	# Provides:          test
	# Required-Start:    $remote_fs $syslog $time
	# Required-Stop:     $remote_fs $syslog $time
	# Default-Start:     2 3 4 5
	# Default-Stop:      0 1 6
	# Short-Description:
	### END INIT INFO

	

	#=======================
	start() {
	        echo "Start Service..."
	        sleep 3
	        echo "Start done..."
	}
	
	#=======================
	stop() {
	 		PID=`ps -aux | grep "$grepFlag" | grep -v grep | awk -F " " '{print $1}'`
			kill -9 $PID
	        echo "Stop Service, PID="$PID		
	        echo "Stop done"
	}
	
	#=======================
	restart() {
	        echo "Restart Service..."
	        Stop
	        Start
	        echo "Restarted Service,PID="$PID
	}

	#=======================
		status() {
	        echo "Service status."		 
	}
	
	case "$1" in
  	start) start ;;
  	stop)  stop  ;;
  	restart) restart ;;
  	status) status ;;
  	*)
    echo "Usage: (start|stop|restart|status)"
    exit 1
   	 ;;
	esac

	exit 0

将test保存到/etc/init.d/目录下。
执行 sudo chmod a+x test

添加到系统启动
sudo update-rc.d test defaults
设置成功后,可以使用systemctl status charge来查看

方式二、创建service文件,通过systemd启动

创建test.service文件,放入/lib/systemd/system目录下或/etc/systemd/system目录下

serivice文件字段解析
【Unit】区块:启动顺序与依赖关系
 Unit区块的Description字段给出当前服务的简单描述,Documentation字段给出文档位置。

接下来的设置是启动顺序和依赖关系:
 After字段:表示本服务应该在哪些服务之后启动。
 Before字段:表示本服务应该在哪些服务之前启动。
 After和Before字段只涉及启动顺序,不涉及依赖关系。

设置依赖关系,需要使用Wants字段和Requires字段。
 Wants字段:表示“弱依赖关系”,如果该服务启动失败或停止运行,不影响本服务继续执行。
 Requires字段:表示“强依赖关系”,如果该服务启动失败或异常退出,本服务也必须退出。

【Service】区块:启动行为
 Service区块定义如何启动前服务。
 许多软件都有自己的环境参数文件,该文件可以用EnvironmentFile字段读取。
 EnvironmetFile字段:指定当前服务的环境参数文件。该文件内部的key=value键值对,可以用$key的形式,在当前配置文件中获取。

ExecReload字段:重启服务时执行的命令。
ExecStop字段:停止服务时执行的命令。
ExecStartPre字段:启动服务之前执行的命令。
ExecStartPost字段:启动服务之后执行的命令。
ExecStopPost字段:停止服务之后执行的命令。

启动字段
【Type】
 simple(默认值):ExecStart字段启动的进程为主进程。
 forking:ExecStart字段将以fork()方式启动,此时父进程会退出,子进程将成为主进程。
 oneshot:类似于simple,但只执行一次,Systemd会等它执行完,才启动其它服务。
 dbus:类似于simple,但会等待D-BUS信号启动。
 notify:类似于simple,但启动结束后会发出通知信息,然后Systemd再启动其它服务。
 idle:类似于simple,但要都能打送其它任务执行完毕,才会启动该服务。一种使用场合是为让该服务的输出,不与其它服务的输出相混合。

重启行为
Service区块有一些字段,定义了重启行为。
 KillMode字段,定义Systemd如何停止服务。
  将KillMode设为process,表示只停止主进程,不停止任何子进程。
KillMode字段可以设置如下:
 control-group(默认值):当前控制组里的所有子进程,都会被杀掉。
 process:只杀主进程。
 mixed:主进程将收到SIGTERM信号,子进程收到SIGKILL信号。
 none:没有进程会被杀掉,只是执行服务的stop命令。

Restart字段:
 定义了Systemd的重启方式。

Restart字段可以设置如下:
 no(默认值):退出后不会重启。
 on-success:只有正常退出时(退出状态码为0),才会重启。
 on-failure:非正常退出时(退出状态码为非0),包括信号终止和超时时,才会重启。
 on-abnormal:只有被信号终止和超时,才会重启。
 on-abort:只有在收到没有捕捉到的信号终止时,才会重启。
 on-watchdog:超时退出,才会重启。
 always:不管是什么退出原因,总是重启。
对于守护进程,推荐设为on-failure。对于那些允许繁盛错误退出的服务,可以设备on-abnormal。

RestartSec字段:表示Systemd重启服务之前,需要等待的秒数。

【Install】区块
 定义如何安装这个配置文件,即怎样做到开机启动。
 WantedBy字段:表示该服务所在的Target。
 Target的含义是服务组,表示一组服务。WantedBy=multi-user.target值的是,本服务所在的Target是multi-user.target。

这个设置非常重要,在实行systemctl enable xxx.service命令时,xxx.service的一个符号链接,就会放在/etc/systemd/system目录下面的multi-user.target.wants子目录之中。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值