You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 18.04中以root身份开机运行Bash脚本失败求助

我来帮你解决Ubuntu 18.04下开机以root身份运行Bash脚本的问题——既然rc.local和crontab都没成功,那咱们试试systemd服务,这是Ubuntu 18.04这类systemd发行版的标准玩法,可靠性比前两者高不少。

方法一:创建自定义systemd服务(首推)

这是最稳妥的方案,毕竟Ubuntu 18.04默认用systemd当初始化系统,rc.local属于兼容模式容易踩坑,crontab的@reboot又经常受环境变量限制。

步骤1:先把你的脚本准备好

确保脚本有可执行权限,而且开头必须加shebang(告诉系统用什么解释器运行):

# 给脚本加执行权限
chmod +x /path/to/your/script.sh

脚本第一行要写:

#!/bin/bash

步骤2:创建systemd服务配置文件

在/etc/systemd/system/目录下新建一个服务文件,比如叫my-boot-script.service:

sudo nano /etc/systemd/system/my-boot-script.service

把下面的内容粘进去,记得替换成你自己的脚本路径:

[Unit]
Description=开机自动运行我的自定义脚本
After=network.target  # 如果你的脚本需要网络就保留,不需要的话换成basic.target或者删掉

[Service]
Type=oneshot
ExecStart=/path/to/your/script.sh
User=root  # 明确指定以root身份运行
RemainAfterExit=yes  # 标记服务已完成,哪怕脚本执行完了

[Install]
WantedBy=multi-user.target

简单解释下关键参数:

  • Type=oneshot:说明脚本只需要执行一次,适合开机一次性任务
  • User=root:直接指定用root权限跑,不用再额外提权
  • After=network.target:保证脚本在网络启动后再执行,避免脚本依赖网络但网络还没好的情况

步骤3:启用并测试服务

# 重新加载systemd的配置,让新服务生效
sudo systemctl daemon-reload
# 设置开机自启
sudo systemctl enable my-boot-script.service
# 先手动运行一次,测试脚本能不能正常工作
sudo systemctl start my-boot-script.service

想看执行状态的话,用systemctl status my-boot-script.service就能看到有没有成功。

为啥rc.local和crontab会失败?

关于rc.local

Ubuntu 18.04的rc.local默认是没启用的,得手动开:

sudo systemctl enable rc-local.service

而且rc.local脚本必须以exit 0结尾,本身还要有可执行权限。另外它的执行时机很早,可能某些系统资源还没准备好,导致脚本跑失败。

关于crontab @reboot

用@reboot的时候,crontab的环境变量和root正常登录的环境不一样,很多常用命令的路径(比如/usr/local/bin)可能不在PATH里,导致脚本里的命令找不到。解决办法要么在脚本里写命令的绝对路径,要么在crontab里指定PATH:

# 编辑root的crontab
sudo crontab -e

添加一行:

@reboot /bin/bash /path/to/your/script.sh

或者带环境变量的版本:

@reboot PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin /path/to/your/script.sh

但就算这样,crontab的@reboot有时候会因为系统启动顺序问题,比你脚本依赖的服务先启动,照样会失败。

总结

优先选systemd服务的方式,它能明确控制执行时机和权限,出问题了也方便排查。如果非要用rc.local或者crontab,记得先检查启用状态和环境变量的问题。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:11:59