whatshotLinux创建systemd启动项实现开机自启动

@Ta 2021-11-17发布,2021-11-17修改 20442点击

以下所有操作都需要root权限,请使用sudo -i

创建如下文件:

/etc/systemd/system/myservice.service

内容:

[Unit]
Description=my service
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/path-to/myservice.sh

[Install]
WantedBy=multi-user.target

/path-to/myservice.sh是要运行的程序,它需要一直保持运行,不会退出。如果/path-to/myservice.sh退出,systemd会以1秒一次的频率不断重启/path-to/myservice.sh

如果你的/path-to/myservice.sh在运行完成后会退出,不需要自动重启,请把Restart=always改成Restart=no


After=network.target表示联网后才会启动这个服务。如果你需要联网前启动,可以删掉。


然后启动:

systemctl start myservice

设为开机自启动:

systemctl enable myservice

查看运行状态:

systemctl status myservice

查看日志:

journalctl -u myservice

修改myservice.service后,刷新systemd守护进程使修改生效:

systemctl daemon-reload

停止服务:

systemctl stop myservice

取消开机自启动:

systemctl disable myservice

删除服务:

rm /etc/systemd/system/myservice.service
回复列表(13|隐藏机器人聊天)
  • @Ta / 2021-11-17 / /

    WorkingDirectory 也比较重要
    红米K30 Pro(变焦版)

  • @Ta / 2021-11-17 / /

    @Curtion,我的思路是ExecStart=/path-to/myservice.sh指向一个脚本,你可以自己在脚本里cd到正确的WorkingDirectory,加上正确的参数启动真正的程序。
    使用exec ./xxx启动程序没有额外开销,不会残留bash进程。

  • @Ta / 2021-11-17 / /

    老虎竟然在更新教程贴
    ~~~

  • @Ta / 2021-11-19 / /
    收藏了
  • @Ta / 2021-11-19 / /

    @加勒比海带,期待老虎解答!
    小米8(白)

  • @Ta / 2021-11-19 / /
    同问
    一直都是使用 sudo su -
    另外三个我也不知道。
  • @Ta / 2021-11-19 / /

    @加勒比海带@艾木友尔尔巴@希望自己长胖胖

    1. 输入谁的密码:
      • su输入的是root用户的密码,sudo输入的是当前用户的密码。
      • 如果当前用户已经是root,执行su不需要输入密码。这就是sudo su只需要输入一次密码的原因,它首先通过sudo切换到root用户,然后以root用户身份执行su,于是不需要再输入root用户的密码。
    2. 工作目录切换:
      • 不带参数的su不会切换工作目录,也就是说,执行后依然停留在当前目录。
      • su -lsudo -i会把工作目录切换到root用户的家目录,相当于在切换到root用户之后执行了cd $HOME
    3. 加载配置文件:
      • 不带参数的su不会加载root用户的配置文件(比如~/.profile~/.bashrc等)。其他命令则会加载。
    4. 缩写:
      • su -su -l的缩写,两者功能相同。
    5. 状态保持:
      • 同一个终端执行sudo一次后,5分钟内不需要输入密码。
      • su没有状态保持功能,每次都需要重新输入密码。

    所以:

    • sudo su -sudo su -lsudo -i完全相同。
    • sudo su和上述三个命令的区别是:
      1. 它不会切换工作目录,切换到root后依然停留在当前目录。
      2. 它不加载root用户的配置文件(比如~/.profile~/.bashrc等)。
    • 如果不加sudo,直接使用su,就需要输入root用户的密码,必须知道root用户的密码才能成功。

    • sudo -isudo su -sudo su -lsu -su -l:进入 login shell。
    • sudo susu:进入 non-login shell。
  • @Ta / 2021-11-20 / /
    强强强。老虎真的强 小米8(白)
  • @Ta / 2021-11-22 / /
    原来老虎也在写日记
  • @Ta / 2021-12-12 / /
    假设一个程序名叫hu60,
    哪个是对的?
    1.
    /etc/systemd/system/hu60service.service
    2.
    /etc/systemd/system/hu60.service


    Description=hu60 service

    ExecStart=/path-to/hu60service.sh



  • @Ta / 2021-12-12 / /

    @chrome,嗯。文件.service前面的是在systemctl中使用的服务名称。

  • @Ta / 2021-12-12 / /

    好文,顶一个 这应该加个精华@老虎会游泳

  • @Ta / 2021-12-13 / /

    @NowTime,加了。

添加新回复
回复需要登录