在/etc/systemd/system/目录创建并配置服务:
-
创建一个新的systemd服务单元文件,以描述你的服务配置。
sudo vi /etc/systemd/system/my-service.service
-
在打开的文件中,添加以下内容来定义你的服务配置:
[Unit] Description=mqnamesrv After=network.target [Service] ExecStart=/app/rocketmq/rocketmq-all-4.7.1-bin-release/bin/mqnamesrv WorkingDirectory=/app/rocketmq/rocketmq-all-4.7.1-bin-release/ User=username Group=groupname Restart=always [Install] WantedBy=multi-user.target
-
Description
:服务的描述信息。 -
After
:指定服务应该在哪些依赖项之后启动。 -
ExecStart
:指定要运行的后台命令的路径。 -
WorkingDirectory
:指定命令的工作目录。 -
User
:指定服务运行的用户。 -
Group
:指定服务运行的用户组。 -
Restart
:指定服务在意外停止后是否自动重启。 -
WantedBy
:指定服务应该被启用的目标。
请替换上述内容中的路径、用户名和组名为你实际的配置。
-
-
保存并关闭文件。
-
重新加载systemd配置,使新的服务生效:
sudo systemctl daemon-reload
-
启动服务:
sudo systemctl start my-service
可以使用
sudo systemctl status my-service
命令来检查服务的状态和日志输出,确保它正常运行。 -
如果你希望服务在系统启动时自动启动,执行以下命令:
sudo systemctl enable my-service
这样服务将会在系统启动时自动启动。
现在,你的后台运行命令已经配置为自启动服务。你可以使用systemd命令来管理和控制该服务,例如启动、停止、重启和查看状态等。
在其它目录创建服务Unit文件并配置
也可以在其它目录创建Unit服务配置文件,比如在/opt/
创建文件ka.service,那么文件完整路径即是/opt/ka.service
然后在/etc/systemd/system/目录中,使用ln -s ka.service /opt/ka.service创建链接,然后enable ka.service即开机自启动
cd /etc/systemd/system/ sudo ln -s ka.service /opt/ka.service sudo systemctl enable ka.service
后来想到,试一下不在/etc/systemd/system/做符号链接,直接在/opt/创建ka.service文件后,直接systemctl enable ka.service:
root@tin:~# cd /opt/ root@tin:/opt# systemctl enable ka.service Failed to enable unit: Unit file ka.service does not exist. root@tin:/opt# systemctl enable /opt/ka.service Created symlink /etc/systemd/system/ka.service → /opt/ka.service. Created symlink /etc/systemd/system/multi-user.target.wants/ka.service → /opt/ka.service.
看到,这时使用systemctl enable ka.service 是不行的,会说不存在,即使当前目录下有这个文件,估计没有加目录前缀,系统默认就是去/etc/systemd/system目录里去找的。加上绝对路径,再进行enable,结果可以了,而且这种方式,系统自动给你在/etc/systemd/system/
目录创建了符号链接,倒是省去了我们自己创建符号链接的操作。
查看服务是否已经enable(开机自启):
systemctl is-enabled your-service-name
timer定义小贴士
定时器timer的定义中,如果没有显示的定义 unit
字段,默认是和 timer
同名 service
单元。
查看已经生效的timer
systemctl list-timers
timer生效
定义好timer,并enable timer(systemctl enable ka.timer)后,如果机器没有重启,则需要执行以下命令让timer生效(刷新,并至少使用start执行一次,才会间隔一段时间去执行):
systemctl daemon-reload systemctl start ka.timer
如果机器要重启,或者是定义在容器Dockerfile,反正就是后面会再开机,则直接
systemctl enable ka.timer
执行过enable即可,无须再执行start。