本文介绍在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:服务所在的服务组。