如何使用 root 权限在启动时运行脚本

如何使用 root 权限在启动时运行脚本

我有一个小脚本来启动一个应用程序并在我的 Ubuntu 16.04 上执行更多操作,如下所示:

#!/bin/bash
./ROC-smi/rocm-smi -d 1 --setfan 90
./ROC-smi/rocm-smi -d 0 --setfan 90
./ROC-smi/rocm-smi -d 2 --setfan 110
./ROC-smi/rocm-smi -d 3 --setfan 110
./ROC-smi/rocm-smi -d 4 --setfan 110
cd teamredminer-v0.4.1-linux
/usr/bin/screen -dm ./teamredminer --algo=cnr --url=*** --user=*** --pass=*** --watchdog_script

我想使用 sudo 自动启动它。我尝试使用 rc.local:

sh /path/to/my/script.sh
exit 0

我也尝试使用 crontab:

@reboot /path/to/my/script.sh

什么都没起作用,当我用 测试它时,rc.local 没有显示任何错误 sudo /etc/init.d/rc.local start,但是当我输入sudo screen -xrscreen -ls或 时sudo screen -ls,我总是收到一条消息,说没有可附加的屏幕。

答案1

我发现你所做的事情可能存在两个问题。

1. 检查你的脚本是否有权运行

只需 chmod-it 即可

    chmod +x /path/to/my/script.sh
    chmod +x /path/to/ROC-smi/rocm-smi

否则它将无法运行。

2. 修复错误路径

当您有 时,您告诉 bash从调用脚本的路径./ROC-smi/rocm-smi运行,而不是从脚本所在的位置运行。这意味着如果您从 调用脚本,bash 将查找而不是。ROC-smi/rocm-smi/root/root/ROC-smi/rocm-smi/path/to/my/script/ROC-smi/rocm-smi

最直接的解决方案是

    #!/bin/bash
    /absolute/path/to/ROC-smi/rocm-smi -d 1 --setfan 90
    /absolute/path/to/ROC-smi/rocm-smi -d 0 --setfan 90
    /absolute/path/to/ROC-smi/rocm-smi -d 2 --setfan 110
    /absolute/path/to/ROC-smi/rocm-smi -d 3 --setfan 110
    /absolute/path/to/ROC-smi/rocm-smi -d 4 --setfan 110
    cd /absolute/path/to/teamredminer-v0.4.1-linux
    /usr/bin/screen -dm ./teamredminer --algo=cnr --url=*** --user=*** --pass=*** --watchdog_script

但是,如果该脚本可以在任何地方运行,那么这个快速补丁就可以做到这个答案

    #!/bin/bash
    scriptdir="$(dirname "$0")"
    cd $scriptdir"
    ROC-smi/rocm-smi -d 1 --setfan 90
    ...

现在,$0不可靠(看这里)所以也许你想尝试cd "${BASH_SOURCE%/*}"一下。我会尝试

    #!/bin/bash
    cd ${BASH_SOURCE%/*}
    ROC-smi/rocm-smi -d 1 --setfan 90
    ROC-smi/rocm-smi -d 0 --setfan 90
    ROC-smi/rocm-smi -d 2 --setfan 110
    ROC-smi/rocm-smi -d 3 --setfan 110
    ROC-smi/rocm-smi -d 4 --setfan 110
    cd /absolute/path/to/teamredminer-v0.4.1-linux
    /usr/bin/screen -dm ./teamredminer --algo=cnr --url=*** --user=*** --pass=*** --watchdog_script

相关内容