如何在引导期间以 root 身份运行脚本

use*_*712 75 boot scripts

我有一个脚本可以在不使用网络管理器的情况下自动启用我的 wifi,但我不知道如何在系统启动时以 root 身份运行脚本。如何让脚本在启动时自动运行?

Rad*_*anu 57

将要运行的脚本放在 /etc/init.d 目录中,并使脚本可执行。

chmod 755 myscript
Run Code Online (Sandbox Code Playgroud)

完成后,在您想要使用的运行级别目录中创​​建一个符号链接,例如,如果您想在图形运行级别 2(Ubuntu 的默认运行级别)中运行程序,您可以将它放在该/etc/rc2.d目录中。你只是不能把它放在目录中,你必须通过用“S”指示启动来表示它何时运行,并且执行顺序很重要。通过给它一个更高的数字,将它放在目录中的所有其他内容之后。

如果要运行的最后一个脚本是rc.local并且已命名,S99rc.local则您需要将脚本添加为S99myscript.

ln -s /etc/init.d/myscript /etc/rc3.d/S99myscript
Run Code Online (Sandbox Code Playgroud)

每个向后兼容的/etc/rc*.d目录都有指向该/etc/init.d/目录的符号链接。

  • 请记住,这不适用于 systemd(即从 Ubuntu 16.04 开始)。请参阅 [this](http://unix.stackexchange.com/a/47715/194670)。 (8认同)
  • 请注意,在 Ubuntu Server 14.04 下,我需要使用 `/etc/rc2.d`,而不是示例中所示的 `rc3.d`。似乎`rc2.d` 不仅仅是图形运行级别。 (2认同)

the*_*eye 27

将命令包含在/etc/rc.local. 每当用户的运行级别更改时,它将运行。

注意:您必须将命令放在 /etc/rc.local 中包含“exit 0”的最后一行之前。

  • 注意:你必须把命令放在 `/etc/rc.local` 的最后一行之前,它包含:`exit 0` (3认同)
  • ubuntu 15.10 中的`/etc/rc.local` 有注释说“这个脚本在每个多用户运行级别结束时执行”。所以脚本可以在启动期间运行多次,对吗? (3认同)

小智 27

使用一个crontab选项让你的脚本在重启后运行,

您可以通过@rebootcron 中添加代码来实现

以 root 用户打开 crontab:

$ sudo crontab -e
Run Code Online (Sandbox Code Playgroud)

在底部添加下一条记录:

@reboot yourScriptPath 
Run Code Online (Sandbox Code Playgroud)

那会做你想做的。

  • 您必须在运行命令 `sudo crontab -e` 时添加该行,以使其在启动期间以 root 身份运行脚本。 (5认同)
  • 不再需要删除`/var/run/crond.reboot`,这似乎很久以前就已修复 (3认同)
  • 这适用于 Ubuntu 20,无需删除 /var/run/crond.reboot,可以运行 `sudo -i -u myuser bash -c '...'`,并且比创建 systemd 脚本简单得多。 (2认同)

YTe*_*rle 14

这在 Ubuntu 17.04 上对我有用:

  1. 创建一个脚本文件,disable_cdrom以方便您的位置。就我而言home/yterle/disable_cdrom。就我而言:

    #!/bin/sh
    eject /dev/sr0 -i 1
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使其可执行 chmod 775 disable_cdrom

  3. 导航到/etc/systemd/system并在那里创建一个service文件。例如sudo gedit /etc/systemd/system/disable_cdrom.service

我的disable_cdrom.service看起来像这样:

[Unit]
Description=Disable cdrom

[Service]
Type=oneshot
ExecStart=/bin/sh /home/yterle/disable_cdrom

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

在哪里ExecStart运行你的脚本/bin/sh

然后运行systemctl enable disable_cdrom.service启用systemd服务


M S*_*mar 5

将您的脚本文件包含在/etc/init.d/ 可执行权限中,然后设置不同的运行级别

$ update-rc.d script-name default
Run Code Online (Sandbox Code Playgroud)

它会将您的脚本置于引导启动状态。