You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让指定Shell命令在Linux系统重启后自动运行?

嘿,我来帮你搞定这个开机自动运行命令的问题!在现代Linux系统里,最靠谱的方式就是用systemd来创建一个自定义服务——比单纯后台挂进程或者用rc.local稳定多了,还能轻松管理启动、停止和排查日志。下面一步步来教你:

方法一:用systemd创建自启动服务(强烈推荐)

这是当前绝大多数Linux发行版(比如Ubuntu、Debian、CentOS、Fedora等)的标准做法,稳定性和可维护性拉满。

1. 创建systemd服务文件

用文本编辑器(比如nano或者vim)创建一个服务配置文件,路径固定在/etc/systemd/system/asebamedulla.service

sudo nano /etc/systemd/system/asebamedulla.service

把下面的内容粘贴进去,注意根据你的实际情况调整参数:

[Unit]
Description=Asebamedulla Serial Service
After=multi-user.target  # 确保系统进入多用户环境后再启动服务

[Service]
Type=simple
ExecStart=/usr/bin/asebamedulla "ser:device=/dev/ttyACM0"
Restart=always  # 进程意外退出或系统重启时自动拉起
User=root  # 若普通用户有权访问/dev/ttyACM0,可改为你的用户名,更安全

[Install]
WantedBy=multi-user.target

几个关键参数说明:

  • Restart=always:核心保障,不管进程是崩溃还是系统重启,都会自动重新运行
  • User:如果你的普通用户账号能正常访问串口设备/dev/ttyACM0,换成你的用户名会更安全,避免用root权限
  • ExecStart里的路径要确保正确!你可以用which asebamedulla命令查到它的绝对路径,替换掉示例里的/usr/bin/asebamedulla

2. 启用并测试服务

保存文件后,先让systemd重载配置:

sudo systemctl daemon-reload

设置开机自启:

sudo systemctl enable asebamedulla.service

现在可以手动启动服务测试是否正常:

sudo systemctl start asebamedulla.service

检查服务状态,显示active (running)就说明没问题:

sudo systemctl status asebamedulla.service

重启系统后,它就会自动运行啦!

3. 排查问题(如果启动失败)

要是服务启动不了,用journalctl看日志找原因:

journalctl -u asebamedulla.service -f

-f参数会实时刷新日志,方便你排查问题。

方法二:用rc.local(仅适用于旧版或兼容系统)

有些老系统或者自定义系统还在用rc.local,但现在很多主流发行版默认已经禁用了这个功能,所以优先推荐systemd。如果非要用的话:

1. 配置rc.local文件

先检查/etc/rc.local是否存在并拥有执行权限:

sudo chmod +x /etc/rc.local

如果文件不存在,直接创建一个:

sudo nano /etc/rc.local

写入下面内容,注意末尾要加&让命令在后台运行,不然会卡住系统启动:

#!/bin/bash
/usr/bin/asebamedulla "ser:device=/dev/ttyACM0" &
exit 0

2. 启用rc-local服务(部分发行版需要)

有些系统需要手动启用rc-local服务才能生效:

sudo systemctl enable rc-local.service
为啥不推荐直接用shell_command &

直接在终端里加&只是让进程在当前会话的后台运行,一旦你退出终端或者系统重启,进程就会直接终止——完全没法实现开机自启的需求。就算用nohup把进程挂后台,也只是临时方案,系统重启后照样消失。所以还是用systemd这种系统级的管理工具最靠谱。

内容的提问来源于stack exchange,提问作者singrium

火山引擎 最新活动