ubuntu 设置开机自启动 ubuntu>=20.04

随笔9个月前发布 希尔伯特程
120 0 0

ubuntu 设置开机自启动在20.04或更高的版本取消了rc.local

ubuntu 设置开机自启动   ubuntu>=20.04

这个时候我们推荐使用Service
首选进

cd /etc/systemd/system

在文件夹下加入一下内容

[Unit]
Description=My Service
After=network.target

[Service]
ExecStart=bash /usr/local/bin/myservice.sh
Restart=always
User=username

[Install]
WantedBy=multi-user.target

ExecStart填写二进制command或者command bash or shell就行
给文件一个权限

sudo chmod 664 /etc/systemd/user/xxx.service

然后让系统加载systemd服务文件

sudo systemctl daemon-reload

最后就是通用的服务Service开机启动

systemctl --user enable xxx.service

下面说一下.service文件的shell信息
能用systemctl管理的服务需要有一个.service文件,在Ubuntu中,通常该文件位于/etc/systemd/system文件夹下

systemctl status   #显示系统状态
systemctl start [单元]  #立即激活单元:
systemctl stop [单元]   #立即停止单元
systemctl restart [单元] #重启单元
systemctl enable [单元]  #开机自动激活单元
systemctl disable [单元] #取消开机自动激活单元
systemctl daemon-reload  #重新载入systemd,扫描新的或有变动的单元

/etc/systemd/system/headscale.service文件说明

[Unit]
Description=headscale controller  # 服务描述 
After=syslog.target  # 前置service,必须前置服务启动后当前服务才能启动,
                     # 在/etc/systemd/system/目录下查看是否有syslog.service文件

[Service]
Type=simple  # 定义启动类型。可设置:simple,exec,forking,oneshot,dbus,notify,idle
             # simple systemd认为该服务将立即启动。服务进程不会 fork 。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket 启用型。
             # forking :systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便 systemd 能够跟踪服务的主进程。
             # oneshot :这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于启用状态。
             # notify :与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
             # dbus :若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。
             # idle :systemd会等待所有任务处理完成后,才开始执行 idle 类型的单元。其他行为与 Type=simple 类似。
User=headscale # 定义启动进程的用户。
Group=headscale # 定义启动进程的组。
ExecStart=/usr/local/bin/headscale serve  # 服务开启时执行脚本 
Restart=always  # 在什么情况下会自动重启 
RestartSec=5   # 自动启动间隔时间 

# Optional security enhancements
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes  # 设为 yes 表示对该单元内的进程屏蔽 /home, /root, /run/user 目录(内容为空且不可访问
ReadWritePaths=/var/lib/headscale /var/run/headscale
AmbientCapabilities=CAP_NET_BIND_SERVICE   # CAP_NET_BIND_SERVICE能力允许进程打开1024以下的端口
RuntimeDirectory=headscale

[Install]
WantedBy=multi-user.target  # 一个是multi-user.target,表示多用户命令行状态;另一个是graphical.target
                            # 查看 multi-user.target 包含的所有服务systemctl list-dependencies multi-user.target

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...