linux下使用systemctl设置开机自动运行程序

本文介绍在Linux下,使用systemctl设置开机自动运行程序,实现创建一个systemd服务单元文件,并启用该服务的方法。

1、创建.service文件

/etc/systemd/system/目录下创建一个以.service结尾的文件,例如myapp.service:

bash 复制代码
sudo touch /etc/systemd/system/myapp.service

2、编写服务

bash 复制代码
sudo vim /etc/systemd/system/myapp.service

写入以下内容:

txt 复制代码
[Unit]
Description=My custom startup program
After=network.target
 
[Service]
Type=simple
ExecStart=/path/to/your/program
 
[Install]
WantedBy=multi-user.target

其中,将/path/to/your/program替换为你想要运行的程序的完整路径。

3、重新加载systemd管理器配置

bash 复制代码
sudo systemctl daemon-reload

4、启用服务

bash 复制代码
sudo systemctl enable myapp.service

至此,重启后。设置的程序就会自动运行了。

5、配置程序日志存储方式

将.service 文件的StandardOutput 和 StandardError 设置为 journal 或 inherit(如果系统支持)。

ini 复制代码
[Service]
	Type=simple
	ExecStart=/path/to/your/program
	StandardOutput=journal
	StandardError=journal

直接从控制台获取输出,可以使用 journalctl 命令来查看服务的日志:

bash 复制代码
journalctl -u myapp.service

6、关于systemctl命令

bash 复制代码
systemctl enable myapp.service  #开启开机自启动
systemctl disable myapp.service #停止开机自启动 
systemctl start myapp.service   #启动 myapp 服务 
systemctl stop myapp.service    #停止 myapp服务 
systemctl restart myapp.service #重启 myapp服务 
systemctl status myapp.service  #查看服务当前状态
systemctl list-units --type=service  #查看所有已启动的服务 
systemctl list-unit-files |grep myapp #查看是否正确启动
sudo systemctl daemon-reload #刷新配置system目录

7、.service文件格式简介

  • Unit

    • Description:对该服务的描述;
    • Documention:说明文档;
    • Before:指定本服务需要在哪些服务之前启动;
    • After:指定本服务在哪些服务之后启动;
    • Wants:弱依赖于某个service,即使被依赖服务启动失败或停止,本服务仍然运行;
    • Requires:强依赖于某个service,如果被依赖服务启动失败或停止,本服务也会停止。
  • Service

    • EnvironmentFile:服务的参数文件,形成$OPTIONS;
    • ExecStart: 服务启动命令
    • ExecReload: 服务重启命令
    • ExecStop: 服务停止命令
    • Type:服务启动类型。默认simple表示ExecStart为主进程,notify类似于simple,启动结束后会发出通知信号。另外还有forking,oneshot,dbus,idle等类型;
    • KillMode:服务停止类型,默认control-group停止时杀死所有子进程,process只杀主进程,none只停止服务,不杀进程;
    • Restart:服务重启类型,默认no不重启,on-success正常退出时重启,on-failure非正常退出时重启,还有always,on-abnormal,on-abort等;
    • RestartSec:间隔多久重启服务。
  • Install

    • WantedBy:服务所在的服务组。

8、参考

使用systemctl start xxx启动自己的程序|开机启动|守护进程。

相关推荐
大聪明-PLUS2 小时前
关于新的 Linux 内核接口 gpio uapi 的说明
linux·嵌入式·arm·smarc
玉树临风江流儿2 小时前
Linux驱动开发总结速记
linux·运维·驱动开发
cccyi72 小时前
Linux 进程信号机制详解
linux·signal·volatile
七宝大爷2 小时前
GPU服务器深度解析:H100/H200的“机头”与“模组”架构详解
运维·服务器·架构·h100·h200
gd63213743 小时前
银河麒麟 aarch64 linux 里面的 qt 怎么安装kit
linux·服务器·qt
A-花开堪折3 小时前
Qemu 嵌入式Linux驱动开发
linux·运维·驱动开发
磊灬泽3 小时前
【Linux驱动开发】PWM子系统-servo
linux·运维·算法
郝学胜-神的一滴4 小时前
Linux系统函数stat和lstat详解
linux·运维·服务器·开发语言·c++·程序人生·软件工程
Mr.亮先生4 小时前
常用、高效、实用的 Linux 服务器监控与运维工具清单
linux·运维·服务器
王道长服务器 | 亚马逊云5 小时前
AWS CloudWatch Logs Insights:实时日志分析,让服务器问题无所遁形
服务器·云计算·aws