用 Linux 系统的朋友,是不是总在愁怎么让程序开机自己启动?试了网上的方法,要么步骤太复杂看不懂,要么照着做了却没效果?其实啊,Linux 添加开机启动命令的方法有好几种,不同的系统版本适合的方法还不一样。今天小编就把最常用的几种方法教给你,新手也能跟着做,一起往下看吧!
先说说:为啥 Linux 的开机启动命令这么麻烦?
用过 Windows 的朋友可能知道,设置开机启动拖个快捷方式就行,但 Linux 不一样。它讲究权限和规则,命令写错一个字母、路径差个符号,都可能让启动失败。而且 Linux 发行版太多,Ubuntu、CentOS、Debian 各有各的习惯,比如 Ubuntu 现在常用 systemd,而有些老服务器还在用 rc.local,这就导致方法不统一。
但也正因为这样,Linux 的启动管理更灵活,能精确控制程序什么时候启动、以什么权限启动。小编第一次用 Linux 时,想让防火墙开机启动,折腾了一下午才弄好,就是因为没搞懂不同方法的区别。
方法一:rc.local 大法,简单直接适合老系统
这种方法是最传统的,在很多老版本 Linux(比如 CentOS 6、Ubuntu 14.04)上很好用。
- 打开终端,输入
sudo nano /etc/rc.local
,回车。这一步是用管理员权限编辑 rc.local 文件,nano 是个简单的编辑器,新手也能上手。 - 在文件里的
exit 0
前面,写上你要执行的命令。比如想开机启动 nginx 服务,就写/usr/sbin/nginx
;想启动自己的脚本,就写脚本的绝对路径,比如/home/yourname/start.sh &
(后面加 & 是让程序在后台运行,不影响开机)。 - 按 Ctrl+O 保存,回车确认文件名,再按 Ctrl+X 退出编辑器。
- 最后输入
sudo chmod +x /etc/rc.local
,给这个文件加上执行权限,不然开机不会运行里面的命令。
不过要注意哦,现在很多新系统(比如 Ubuntu 16.04 以后)默认没有启用 rc.local,就算写了命令也没用。这时候得先启用它,具体方法可以搜 “你的系统名 + 启用 rc.local”,步骤稍微多一点,但也不难。
方法二:systemd 服务,新系统首选,稍微复杂但靠谱
现在主流的 Linux 系统基本都用 systemd 来管理启动项,比如 Ubuntu 18.04+、CentOS 7+,这种方法虽然步骤多,但稳定且功能强。
- 先创建一个服务文件,终端输入
sudo nano /etc/systemd/system/your service name.service
,比如你的程序叫 myapp,就命名为 myapp.service。 - 在文件里输入以下内容(注意改括号里的内容):plaintext
[Unit] Description=这是我的程序启动服务(随便写个描述) After=network.target(表示在网络启动后再运行这个程序) [Service] ExecStart=/path/to/your/program(程序的绝对路径,比如/usr/bin/myapp) User=username(运行程序的用户,一般填你的用户名) Restart=always(程序崩溃后自动重启,可选) [Install] WantedBy=multi-user.target
- 保存退出后,输入
sudo systemctl daemon-reload
,让系统识别新服务。 - 输入
sudo systemctl enable your service name
,设置开机启动。 - 想测试的话,输入
sudo systemctl start your service name
,看看程序是不是启动了。
小编在 Ubuntu 20.04 上用这个方法设置过 Python 脚本开机启动,一开始忘了写 User 参数,导致程序权限不够跑不起来,后来加上就好了。你看,细节多重要。
两种方法对比,该选哪个?
方法 | 优点 | 缺点 | 适合系统 |
---|---|---|---|
rc.local | 步骤简单,容易理解 | 新系统可能不支持 | CentOS 6、Ubuntu 14.04 等老系统 |
systemd | 功能强,支持自动重启 | 步骤多,配置文件复杂 | 大部分新系统,如 Ubuntu 18.04+、CentOS 7+ |
要是你用的是新系统,小编建议直接学 systemd 方法,虽然一开始觉得麻烦,但学会了能解决很多问题;老服务器的话,rc.local 足够用了。
常见问题:命令添加了,开机还是没反应?
- 问:路径绝对没错,权限也给了,为啥就是不启动?
答:可能是程序依赖的环境没加载。比如有些脚本需要特定的环境变量,在启动命令前加上source /etc/profile
试试,或者把完整的环境变量写在命令里。 - 问:用 systemd 设置后,启动提示 “failed” 怎么办?
答:输入sudo journalctl -u your service name
,查看错误日志,里面会告诉你具体哪里错了,比如路径不对、权限不足,照着改就行。
小编之前遇到过一个奇葩问题,程序启动需要显示器环境,而 Linux 开机默认没加载图形界面,导致命令执行失败,后来在服务文件里加了Environment=DISPLAY=:0
才解决,你说这谁能想到。
小编的一点心得
Linux 添加开机启动命令,别怕出错,多试几次就熟了。新手可以先在虚拟机里练手,设置错了也不怕影响真实系统。记住,不管用哪种方法,绝对路径一定要写对,Linux 不像 Windows 会自动找程序,路径错了就等于白忙活。
另外,别贪多,一次只加一个启动命令,确认没问题了再加下一个,不然出了问题都不知道是哪个命令的错。要是实在搞不定,多看看你所用 Linux 发行版的官方文档,那里的方法最靠谱。希望这些能帮到你,玩 Linux 越来越顺!