Linux 开机执行有几种方式, 一种是设置成系统服务, 随着系统加载而启动, 另一种是修改 /etc/rc.local 脚本, 在 exit 之前加入需要执行的语句. 后者默认是以 root 用户执行, 非 root 执行可以这么写
su - yourname -c 'command'
yourname 是用户名, command 是想要执行的命令. 但在实际中, 查看后台进程发现多了一个su 进程, 就是上面的命令. 无视它倒也没什么事情, 但完美主义者总觉得不舒服. 咱们还是聊聊系统服务的方式.
systemctl 是一个很好的工具, 管理系统的自启动服务. 看以下的使用方式:
# 以当前用户启动 pulseaudio
systemctl --user start pulseaudio
# 设置当前用户 login 时启动 pulseaudio
systemctl --user enable pulseaudio
# 任意用户 login 时启动 pulseaudio
sudo systemctl --global enable pulseaudio
# 以上都需要账号登录后才启动服务, 还不是真正意义上的开机自启动
# 开机自启动. 必须以 root 执行下面命令
$ sudo systemctl enable pulseaudio
Created symlink /etc/systemd/system/default.target.wants/pulseaudio.service → /lib/systemd/system/pulseaudio.service.
Created symlink /etc/systemd/system/sockets.target.wants/pulseaudio.socket → /lib/systemd/system/pulseaudio.socket.
# 第一次创建服务会生成上面的文件
# 打开 pulseaudio.service 在 [Service] 下面加入指定的用户, 用户组
User=pi
Group=lp
# 修改运行条件
ConditionUser=root
# 重启服务
sudo systemctl restart pulseaudio
# 停止服务
systemctl stop pulesaudio
# 删除当前用户的自启动服务
systemctl --user disable pulseaudio
如果你像上面那样运行 sudo systemctl enable pulseaudio 发现报错, 意思是找不到 pulseaudio.service . 是的, pulseaudio 原本是不能以 root 运行的, 迂回的办法, 先这样执行
systemctl --user enable pulseaudio
然后把生成的 pulseaudio.* 移到 /lib/systemd/system/ 下. 修改好, 然后再次执行 sudo systemctl enable pulseaudio , 没有报错了
更多有趣实用的技巧, 关注我的公众号随时为你奉上