文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Linux之service服务-实现程序脚本开机自启

2023-09-16 06:28

关注

        Linux中.service文件是某项服务对应的配置文件,可用于systemd管理和控制的服务的设置。

        .service 文件通常包含3个模块:

[Unit]     控制单元,表示启动顺序和依赖关系。[Service]  服务,表示服务的定义。[Install]  安装,表示如何安装配置文件。

        注:service配置文件字段详解见尾部的 附录

        例如:Todesk开机自启服务

[Unit]Description=ToDesk Daemon Service (服务描述)After=network-online.target (服务依赖,再这些服务后启动本服务)Before=nss-lookup.target (服务依赖,再这些服务前启动本服务)Wants=network-online.target nss-lookup.target (与当前服务配合的其他服务,如果它们没有运行,当前服务不会启动失败)[Service]Type=simple (默认值,systemd认为该服务将立即启动)ExecStart=/opt/todesk/bin/ToDesk_Service (启动当前服务的命令)ExecStop=/bin/kill -SIGINT $MAINPID (停止当前服务时执行的命令)Restart=on-failure (定义何种情况 Systemd 会自动重启当前服务,当前是仅在服务进程异常退出时重启)RestartSec=3s (自动重启当前服务间隔的秒数)User=root (设置进程在执行时使用的用户,当前是root)[Install]WantedBy=multi-user.target (表示该服务所在的服务组,当前是服务所在的服务组是multi-user.target)

1.service存放位置

        .service 文件配置的服务常用systemd管理,然而,systemd有系统和用户区分:

        系统(/user/lib/systemd/system/)  ARM的可能是/usr/lib/systemd/system

        用户(/etc/lib/systemd/)

        一般系统管理员手工创建的单元文件建议存放在/etc/systemd/system/目录下面。我们的todeskd.service是放在/etc/systemd/system/下的。

2.设置服务开机自启

        将.service文件放到/etc/systemd/system/后,使用systemctl enable todeskd.service命令用于设置开机自启服务,原理其实就是在上面两个目录之间,建立符号链接关系。即会在/etc/systemd/system/multi-user.target.wants/的目录下新建一个/usr/lib/systemd/system/todeskd.service文件的链接。

3.启动服务

        使用systemctl start todeskd.service命令,启动todesk服务,此时可以查看ToDesk_Service有没有在后台运行:ps -aux | grep ToDesk_Service

        如果程序正常在后台启动了,那么你就可以重启系统检验一下程序有没有开机自启!

1.修改配置文件后重启

# 重新加载配置文件

sudo systemctl daemon-reload

 重启相关服务

sudo systemctl restart 服务名

2.服务管理

systemctl start 服务名            开启服务

systemctl stop 服务名            关闭服务

systemctl status 服务名     显示状态

systemctl restart 服务名     重启服务

systemctl enable 服务名     开机启动服务

systemctl disable 服务名     禁止开机启动

systemctl daemon-reload 修改服务配置文件后需要重新加载服务

systemctl is-enabled 服务名 查询是否自启动服务

systemctl list-units              查看系统中所有正在运行的服务

systemctl list-unit-files      查看系统中所有服务的开机启动状态

systemctl list-dependencies 服务名        查看系统中服务的依赖关系

systemctl mask 服务名               冻结服务

systemctl unmask 服务名           解冻服务

systemctl set-default multi-user.target     开机时不启动图形界面

systemctl set-default graphical.target      开机时启动图形界面

 systemctl is-active 服务名  显示某个 Unit 是否正在运行

systemctl is-failed 服务名  显示某个 Unit 是否处于启动失败状态

systemctl is-enabled 服务名  显示某个 Unit 服务是否建立了启动链接

systemd-analyze blame  查看每个服务的启动耗时

systemctl list-units  查看当前运行的所有服务

查看服务是否开机启动

systemctl list-unit-files

每个配置文件的状态,一共有四种。

显示service服务的状态

systemctl status  todeskd.service

Active行:

active(running) 表示程序正在执行;
atcive(exited) 执行一次就正常退出的服务,不在系统中执行任何程序;
active(waiting) 正在执行中,处于阻塞状态,需要等待其他程序执行完才能执行;
inactive (dead) 未启动状态;

附录:

service配置文件字段详解

[Unit]区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及配置与其他 Unit 的关系。它的主要字段如下。

Description:简短描述

Documentation:文档地址

Requires:当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败

Wants:与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败

BindsTo:与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行

Before:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动

After:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动

Conflicts:这里指定的 Unit 不能与当前 Unit 同时运行

Condition...:当前 Unit 运行必须满足的条件,否则不会运行

Assert...:当前 Unit 运行必须满足的条件,否则会报启动失败

[Service]区块用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块。它的主要字段如下。

Type:定义启动时的进程行为。它有以下几种值。

Type=simple:默认值,执行ExecStart指定的命令,启动主进程

Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出

Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行

Type=dbus:当前服务通过D-Bus启动

Type=notify:当前服务启动完毕,会通知Systemd,再继续往下执行

Type=idle:若有其他任务执行完毕,当前服务才会运行

ExecStart:启动当前服务的命令

ExecStartPre:启动当前服务之前执行的命令

ExecStartPost:启动当前服务之后执行的命令

ExecReload:重启当前服务时执行的命令

ExecStop:停止当前服务时执行的命令

ExecStopPost:停止当其服务之后执行的命令

RestartSec:自动重启当前服务间隔的秒数

Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog

TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数

Environment:指定环境变量

[Install]通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动。它的主要字段如下。

WantedBy:它的值是一个或多个 Target,当前 Unit 激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中

RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中

Alias:当前 Unit 可用于启动的别名

Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit

[参考链接]

https://blog.csdn.net/w2009211777/article/details/125489179

https://blog.csdn.net/weixin_33768481/article/details/89770056
https://blog.csdn.net/a913909626/article/details/118405378
https://www.cnblogs.com/q149072205/p/11541693.html

https://blog.csdn.net/liuchonghua/article/details/81743606

https://www.cnblogs.com/zwcry/p/9602756.html

https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html

https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html


感谢!

来源地址:https://blog.csdn.net/qq_34885669/article/details/128011138

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯