У меня есть свой небольшой сценарий, чтобы запустить приложение и сделать еще некоторые вещи на моей 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
, Я всегда получал сообщение, что нет никакого экрана для присоединения.
Я вижу, что могло бы быть две проблемы с тем, что Вы делаете.
Просто chmod-это как
chmod +x /path/to/my/script.sh
chmod +x /path/to/ROC-smi/rocm-smi
Иначе это не будет работать.
Когда Вы имеете ./ROC-smi/rocm-smi
Вы говорите удару работать 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