Linux Systemd服务创建与配置

发布于:2024-05-01 ⋅ 阅读:(29) ⋅ 点赞:(0)
在/etc/systemd/system/目录创建并配置服务:
  1. 创建一个新的systemd服务单元文件,以描述你的服务配置。

    sudo vi /etc/systemd/system/my-service.service
  2. 在打开的文件中,添加以下内容来定义你的服务配置:

    [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:指定服务应该被启用的目标。

    请替换上述内容中的路径、用户名和组名为你实际的配置。

  3. 保存并关闭文件。

  4. 重新加载systemd配置,使新的服务生效:

    sudo systemctl daemon-reload
  5. 启动服务:

    sudo systemctl start my-service

    可以使用 sudo systemctl status my-service 命令来检查服务的状态和日志输出,确保它正常运行。

  6. 如果你希望服务在系统启动时自动启动,执行以下命令:

    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。


网站公告

今日签到

点亮在社区的每一天
去签到