我有我的小脚本来启动一个应用程序,并在我的Ubuntu16.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
时,我总是收到一条消息,即没有任何屏幕可附加。
发布于 2019-03-22 08:22:55
我看你在做什么可能有两个问题。
的权限
只是有点.
chmod +x /path/to/my/script.sh
chmod +x /path/to/ROC-smi/rocm-smi
否则它就跑不了了。
当您有./ROC-smi/rocm-smi
时,您告诉bash从调用脚本的路径运行ROC-smi/rocm-smi
,而不是从脚本所在的位置运行。这意味着如果从/root
调用脚本,bash将查找/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
https://askubuntu.com/questions/1127873
复制