Linux使用systemctl创建自定义服务及开机启动

Linux使用systemctl创建自定义服务及开机启动

Systemctl 是一个管理系统和服务的工具,常用的命令(以mariadb数据库为例)如下:

  1. 启动服务: sudo systemctl start mariadb
  2. 停止服务: sudo systemctl stop mariadb
  3. 重启服务: sudo systemctl restart mariadb
  4. 查看服务状态:sudo systemctl status mariadb
  5. 设置服务开机启动:sudo systemctl enable mariadb
  6. 取消服务开机启动: sudo systemctl disable mariadb
  7. 查看是否开机启动:sudo systemctl is-enabled mariadb

如果我们自己创建一个服务,也能使用systemctl命令进行启动、停止和开机启动。下面以将一个python程序 test.py 作为服务为例。

  1. python程序写完以后,执行程序的命令为:
    python3 test.py

  2. 创建一个服务配置文件: sudo vi /usr/lib/systemd/system/test.service,写入如下内容:

    [Unit]
    Description=This is a test service.
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/python3 /home/pi/test.py
    
    [Install]
    WantedBy=multi-user.target

    其中Unit段的Description是服务的描述信息。
    Service段的ExecStart就是启动服务要执行的命令。需要注意的是,这里的路径要写完整的文件路径。

  3. 保存上述文件后,一个最简单的服务就完成了。接下来可以通过sudo systemctl start test来启动这个服务,或者通过sudo systemctl enable test来使这个服务开机启动。

  4. [Service]段中可以指定执行这个脚本的用户和用户组,例如使用用户pi来运行:

    [Service]
    Type=simple
    User=pi
    Group=pi
    ExecStart=/usr/bin/python3 /home/pi/test.py