Как запустить скрипт на запуске с корнем

У меня есть свой небольшой сценарий, чтобы запустить приложение и сделать еще некоторые вещи на моей 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, Я всегда получал сообщение, что нет никакого экрана для присоединения.

2
задан 22 March 2019 в 18:32

1 ответ

Я вижу, что могло бы быть две проблемы с тем, что Вы делаете.

1. Проверьте, что Ваш документ на получение имеет разрешение работать

Просто chmod-это как

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

Иначе это не будет работать.

2. Зафиксируйте неправильные пути

Когда Вы имеете ./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
0
ответ дан 2 December 2019 в 06:26

Другие вопросы по тегам:

Похожие вопросы: