Не удается успешно запустить команду в rc.local

Я хочу, чтобы команда sslocal автоматически запускалась, поэтому я пишу в /etc/rc.local

sudo sslocal -c /etc/ss.json -d start plank exit 0

, но после перезапуска sudo systemctl status rc-local это показывает, что

rc-local.service - /etc/rc.local Compatibility Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled) Drop-In: /lib/systemd/system/rc-local.service.d └─debian.conf Active: failed (Result: exit-code) since 2017-12-07 16:05:51 +08; 6min ago Process: 1155 ExecStart=/etc/rc.local start (code=exited, status=1/FAILURE) December 07 16:05:46 lucas-CW65S rc.local[1155]: INFO: loading config from /etc/ss.json December 07 16:05:50 lucas-CW65S rc.local[1155]: 2017-12-07 16:05:50 INFO loading libcrypto from libcrypto.so.1.0.0 December 07 16:05:50 lucas-CW65S sudo[1158]: pam_unix(sudo:session): session closed for user root December 07 16:05:51 lucas-CW65S rc.local[1155]: Failed to connect to Mir: Failed to connect to server socket: no file and directory December 07 16:05:51 lucas-CW65S rc.local[1155]: Unable to init server: cannot connect : deny connect December 07 16:05:51 lucas-CW65S rc.local[1155]: [WARN 16:05:51.155503] [Gtk] cannot open display: December 07 16:05:51 lucas-CW65S systemd[1]: rc-local.service: Control process exited, code=exited status=1 December 07 16:05:51 lucas-CW65S systemd[1]: Failed to start /etc/rc.local Compatibility. December 07 16:05:51 lucas-CW65S systemd[1]: rc-local.service: Unit entered failed state. December 07 16:05:51 lucas-CW65S systemd[1]: rc-local.service: Failed with result 'exit-code'

ключевой момент может быть sudo[1158]: pam_unix(sudo:session): session closed for user root, и кажется, что ему нужен пароль sudo при переключении на статус sudo, но как я могу ввести его в файл rc.local? ..

3
задан 9 December 2017 в 19:31

4 ответа

Простое исправление: удалите слово «sudo» из вашего скрипта.

Простое исправление : /etc/rc.local уже выполняется как root, поэтому вам не нужен sudo там.

PS: Вы не должны вызывать sudo из сценария оболочки по какой бы то ни было причине.

1
ответ дан 18 July 2018 в 01:40

У вас есть две проблемы:

/etc/rc.local работает как root, поэтому вам не нужно sudo rc.local - это скрипт, который является последовательным и выполняется каждый командный блок. Запустите свои команды в фоновом режиме, добавив & в конец.

Также обратите внимание, что rc.local использует #!/bin/sh -e, что означает, что он выйдет из любой ошибки. Если вы хотите, чтобы сценарий продолжал выполнение, даже если одна из команд не работает, используйте подход command arg1 arg2 || true.

1
ответ дан 18 July 2018 в 01:40

Простое исправление: удалите слово «sudo» из вашего скрипта.

Простое исправление : /etc/rc.local уже выполняется как root, поэтому вам не нужен sudo там.

PS: Вы не должны вызывать sudo из сценария оболочки по какой бы то ни было причине.

1
ответ дан 24 July 2018 в 17:26

У вас есть две проблемы:

/etc/rc.local работает как root, поэтому вам не нужно sudo rc.local - это скрипт, который является последовательным и выполняется каждый командный блок. Запустите свои команды в фоновом режиме, добавив & в конец.

Также обратите внимание, что rc.local использует #!/bin/sh -e, что означает, что он выйдет из любой ошибки. Если вы хотите, чтобы сценарий продолжал выполнение, даже если одна из команд не работает, используйте подход command arg1 arg2 || true.

1
ответ дан 24 July 2018 в 17:26

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

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