Linux写一个进程自启动脚本,Linux进程启动脚本编写

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

有时候,我们自己写了一个Python脚本,但是怎么能像一个服务注册进系统内呢,使用系统命令systemctl进行管理?

我这里的系统是:centos 7.2

Linux 进程运行的7个等级运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动

运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆

运行级别2:多用户状态(没有NFS)

运行级别3:完全的多用户状态(有NFS),登陆后进入控制面板命令行模式

运行级别4:系统未使用,保留

运行级别5:X11控制面板,登陆后进入图形GUI模式

运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

运行级别的原理在目录/etc/rc.d/init.d下有许多服务器脚本进程,一般称为服务(service)

在/etc/rc.d下有7个名为rcN.d的目录,对应系统的7个运行级别

rcN.d目录下都是一些符号链接文档,这些链接文档都指向init.d目录下的service脚本文档,命名规则为K+nn+服务名或S+nn+服务名,其中nn为两位数字,例如:S10network。

系统会根据指定的运行级别进入对应的rcN.d目录,并按照文档名顺序检索目录下的链接文档

对于以K(kill)开头的文档,系统将终止对应的服务

对于以S(start)开头的文档,系统将启动对应的服务

查看运行级别用:runleve

进入其它运行级别用:init N, init 0 关机, init 6 重启

所以简单的就是写一个脚本,放在/etc/rc.d/init.d目录下,然后在想要启动的系统级别目录下使用软链接指向,并且遵循标准的命令格式

但是我们怎么样使用systemctl命令进行管理服务呢,例如我们的redis?

我们编写一个shell脚本,用于控制redis的启动,停止和重启操作

示例:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56# description: Redis is an open source, advanced key-value store.

#

# processname: redis-server

# config: /data/redis/config

# pidfile: /var/run/redis.pid

PATH=/usr/local/bin:/sbin:/usr/bin:/bin

REDISPORT=6379

EXEC=/usr/local/readis/bin/redis-server

REDIS_CLI=/usr/local/readis/bin/redis-cli

PIDFILE=/usr/local/readis/run/redis_6379.pid

CONF="/usr/local/readis/conf.d/redis.conf"

function () {

if [ -f $PIDFILE ]

then

echo -ne "$PIDFILE exists, process is already running or crashedn"

else

echo -ne "Starting Redis server...n"

$EXEC $CONF

fi

}

function () {

if [ ! -f $PIDFILE ]

then

echo -ne "$PIDFILE does not exist, process is not runningn"

else

PID=$(cat $PIDFILE)

$REDIS_CLI -p $REDISPORT SHUTDOWN

while [ -x ${PIDFILE} ]

do

echo -e "Waiting for Redis to shutdown ...n"

sleep 1

done

echo -e "Redis stopped"

fi

}

case "$1" in

start) start

;;

stop) stop

;;

restart)

stop

start

;;

esac

chkconfig: 2345 20 80 (这里作一下特殊说明:20 是该进程开机的启动优先级,值越小越优先;80是关机时的优先级,值越小越先关闭;这里就可以设定linux值的开关机顺序了)

如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级。

这样执行:./redis start|stop|restart 就可以了

然后我们创建一个redis.service服务

文档:/usr/local/readis/ini.d/redis 就是我们上面编写的redis管理脚本

redis.service1

2

3

4

5

6

7

8

9

10

11

12

13[Unit]

Description=redis

After=network.target

[Service]

Type=forking

ExecStart=/usr/local/readis/ini.d/redis start

ExecReload=/usr/local/readis/ini.d/redis restart

ExecStop=/usr/local/readis/ini.d/redis stop

PrivateTmp=true

[Install]

WantedBy=multi-user.target

redis.service 置于目录/usr/lib/systemd/system/

执行:systemctl daemon-reload

然后设置自动启动:systemctl enable redis

然后就可以使用systemctl命令管理服务了:systemctl start redis

参考阅读

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值