如何在启动时运行命令序列?

如何在启动时运行命令序列?

我需要在启动时运行一系列命令。此序列也需要 root 密码。我该怎么做?

这是我需要运行的命令序列:

virginia@asus-F552CL:~$ cd MT7630E_Wi-Fi_BT_Source_Release_20140625/rt2x00/
virginia@asus-F552CL:~/MT7630E_Wi-Fi_BT_Source_Release_20140625/rt2x00$ sudo su
[sudo] password for virginia: 
root@asus-F552CL:/home/virginia/MT7630E_Wi-Fi_BT_Source_Release_20140625/rt2x00# ./load.sh
root@asus-F552CL:/home/virginia/MT7630E_Wi-Fi_BT_Source_Release_20140625/rt2x00# exit
virginia@asus-F552CL:~/MT7630E_Wi-Fi_BT_Source_Release_20140625/rt2x00$ 

答案1

既然您提到必须执行 sudo su,我假设您希望在登录后执行这些命令。

为此,您必须将命令放入脚本文件中,例如myCom.sh。内容如下所示:

cd MT7630E_Wi-Fi_BT_Source_Release_20140625/rt2x00/
echo myPassword | sudo -S su && sudo su -c ./load.sh

请注意,由于每个命令都以 root 身份运行,并且脚本在完成后返回,因此不需要退出。

还必须以纯文本形式提供“myPassword”。

然后使用 KDE/Ubuntu 的启动管理器启动此脚本。或者您可以将此文件直接放在 中~/.profile

另一方面,如果您想在启动时而不是登录时运行这些命令,则可以使用 init 脚本。您不必sudo su在那里使用,因为所有内容都将在 root 上下文中运行。

答案2

您可以修改您的/etc/rc.local在运行级别启动序列中作为最后一个服务执行的文件,并授予 root 权限。

以下是一个例子:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
cd /home/virginia/MT7630E_Wi-Fi_BT_Source_Release_20140625/rt2x00
/bin/bash load.sh
exit 0

使用此命令验证您的更改:

sudo /etc/init.d/rc.local start

请注意以下几点:

  1. load.sh 将以 root 身份运行
  2. 环境受到限制,因此您可能需要定义缺少的变量
  3. 如果你想登录系统日志, 使用logger "message"

如果可能的话我建议您像这样执行脚本:

  /bin/bash /home/virginia/MT7630E_Wi-Fi_BT_Source_Release_20140625/rt2x00/load.sh

在 Ubuntu 运行级别上,当filesystem and static-network-up事件发生时启动。如果您需要启动加载脚本在特定事件中,比更好地定义新兴任务

相关内容