我有一个小脚本来启动一个应用程序并在我的 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 -xr
或screen -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