在用户目录下创建`startup.sh`并写入需要开机执行的命令
增加执行权限
```bash
chmod +750 startup.sh
```
在`/usr/lib/systemd/system`下创建`startup.service`
在`/system`下而不是`/user`下创建是因为如果使用`—user`启动,程序只在用户登陆终端后生效
编写`startup.service`
```ini
[Unit]
Description=Startup
After=network.target
[Service]
ExecStart=/bin/bash /home/ubuntu/startup.sh
[Install]
WantedBy=default.target
```
注意:如果需要启动常驻后台的程序,则需要为其单独写一个`service`而不是放在`startup.sh`中,不然后面的程序无法启动
开启开机自启
```bash
sudo systemctl enable startup.service
```
查看状态
```bash
sudo systemctl status startup.service
```
如果需要守护进程,进程崩溃后自动重启程序,则改为
```ini
[Unit]
Description=Startup
After=network.target
[Service]
ExecStart=/bin/bash /home/ubuntu/startup.sh
Restart=always
RestartSec=10
StartLimitInterval=0
[Install]
WantedBy=default.target
```
表示若启动失败,则10秒后重启,重启次数无限制
如果需要调用用户配置,则改为
```ini
[Unit]
Description=Startup
After=network.target
[Service]
ExecStart=/bin/bash /home/ubuntu/startup.sh
Restart=always
RestartSec=10
StartLimitInterval=0
User=%i
[Install]
WantedBy=default.target
```
并将文件名改为`startup@.service`
如果需要配置工作目录
```ini
[Unit]
Description=Startup
After=network.target
[Service]
ExecStart=/bin/bash startup.sh
Restart=always
RestartSec=10
StartLimitInterval=0
User=%i
WorkingDirectory=/home/ubuntu
[Install]
WantedBy=default.target
```
注意,除了配置了工作目录的执行文件不用绝对路径,其余都要用绝对路径
启动命令为
```bash
sudo systemctl enable startup@username
```
什么是需要调用用户配置?
以`code-server`为例
官方推荐的启动方式为
```bash
systemctl —-user enable code-server
```
由于`code-server`在用户目录下有`.config`以及`extensions`等配置文件,所以需要用`—user`来调用
如果直接使用sudo,则无法调用到。
但是前面说过,使用`—user`就无法退出终端后保持运行,而程序跑在服务器上不可能一直开着终端,因此需要使用既使用sudo,又调用用户配置。办法就是引入`User`和`@`
我的用户名是`ubuntu`所以命令为
```bash
sudo systemctl enable code-server@ubuntu
```
而且`code-server`自带这种启动方式,直接调用就可以了
0 Comments latest
No comments.