centos系统自定义服务实现

  在centos系统中,运行着很多服务,这些服务由系统systemd负责管理,通过systemctl命令可以管理服务,比如服务的启动、停止、开机自启动、挂掉重启等等。在实际项目中,自己开发的linux服务程序也可以加入到systemd管理中。

一、systemd介绍

  systemd管理主要有四种类型文件.mount,.service,.target,.wants,一般常见的linux 服务使用.service。用户将编写的systemd的管理单元(Unit)文件放在目录/usr/lib/systemd/system或/etc/systemd/system, 就可以通过systemctl命令管理服务。

二、编写服务管理单元(.service)文件

.service: 定义服务
分为[Unit],[Service],[Install]三个小节
[Unit]
Description:描述信息
After:network.target

[Service]
EnvironmentFile:通过文件定义程序运行时的环境变量
ExecStart: 程序启动命令或脚本
Restart: 程序退出或启动失败时,重启
RestartSec: 重启间隔时间,单位是秒

[Install]
Alias: 服务别名
WangtedBy: 如多用户, multi-user.target

三、实际案例

3.1 编写管理服务

my_app_manager.service

[Unit]
Description= my app for example
After=network.target

[Service]
Type=simple
EnvironmentFile=/usr/local/etc/my_app.env
User=root
ExecStart=/usr/local/bin/my_app
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

my_app.env:

MY_DESC="this is test"

注:my_app.env是环境变量文件

3.2 linux程序

main.c

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char *value = NULL;
    char buf[64] = {0};

    printf("hello world\n");
    value = getenv("MY_DESC");
    printf("value: %p\n", value);
    snprintf(buf, sizeof(buf), "echo %s > /tmp/test.log", value);
    system(buf);

    while (1) {
        printf("loop\n");
        sleep(10);
    }

    return 0;
}

Makefile:

all:
	gcc -o my_app main.c -g
clean:
	rm my_app

3.3 服务安装

cp my_app_manager.service /etc/systemd/system/
cp ./example/my_app /usr/local/bin/
cp my_app.env /usr/local/etc/

3.4 服务管理

3.4.1 启动服务:

systemctl start my_app_manager.service

查看进程:
$ ps -e | grep my_app
65747 ? 00:00:00 my_app

程序中生成的test.log,内容是环境变量值
$ cat /tmp/test.log
this is test

3.4.2 查看服务状态

$ systemctl status my_app_manager.service
● my_app_manager.service - my app for example
Loaded: loaded (/etc/systemd/system/my_app_manager.service; static; vendor preset: disabled)
Active: active (running) since Fri 2023-06-09 14:32:45 CST; 29min ago
Main PID: 65747 (my_app)
Tasks: 1
CGroup: /system.slice/my_app_manager.service
└─65747 /usr/local/bin/my_app

Jun 09 14:32:45 localhost.localdomain systemd[1]: [/etc/systemd/system/my_app_manager.service:14] Unknown lvalue ‘Wantedby’ in section ‘Install’
Jun 09 14:32:45 localhost.localdomain systemd[1]: Started my app for example.

3.4.3 停止服务

systemctl stop my_app_manager.service

3.4.4 杀掉服务进程,服务自动重启

[root@localhost centos_service]# ps -e | grep my_app
65747 ? 00:00:00 my_app
[root@localhost centos_service]# kill 65747
[root@localhost centos_service]# ps -e | grep my_app
[root@localhost centos_service]# ps -e | grep my_app
[root@localhost centos_service]# ps -e | grep my_app
[root@localhost centos_service]# ps -e | grep my_app
66461 ? 00:00:00 my_app

3.4.5 允许/禁止开机自启动

systemctl enable/disable my_app_manager.service

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪游东戴河

你就是这个世界的唯一

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值