ubuntu 设置开机自启动在20.04或更高的版本取消了rc.local
这个时候我们推荐使用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
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...