Как сделать так, чтобы зарегистрированные расширения для `binfmt _misc `сохранялись при перезагрузке?

Эти типы вызовов всегда сложны, потому что вы должны убедиться, что все оценивается в правильном месте. Т.е. добавьте правильное количество обратных косых черт.

Если да

script="sh -c \"nohup sh -c '$SCRIPT1' > /dev/null 2>&1 & \""
sshpass -e ssh -n -o StrictHostKeyChecking=no -l $targets_username $IP "$script"

он должен делать то, что вы хотите (обратите внимание на -nчтобы stdin оставался закрытым ). Вы можете убедиться, что соединение ssh действительно закрывается, добавив timeперед командой sshpass или запустив netstatв $SCRIPT1и проверив открытые соединения.

Вы должны убедиться, что все stdin, stdout и stderr закрыты, иначе sshбудет ждать, пока они не закроются, даже если процесс находится в фоновом режиме.

Если описанное выше не работает, может потребоваться дополнительная оценка аргументов командной строки с помощью sshpass. Кроме того, использование одинарных кавычек вокруг $SCRIPT1задерживает расширение, например. переменные оболочки внутри $SCRIPT1до удаленной стороны.

Теперь, несмотря на то, что вы можете выполнить задачу с помощью этого подхода, я бы рекомендовал вам использовать инструмент, предназначенный для такого рода автоматизации, например. Ансибл(https://docs.ansible.com/ansible/latest/index.html). При фоновом подходе вам придется вручную (или с помощью другого разработанного инструмента )проверять, была ли команда выполнена успешно или нет, или завершено ли ее выполнение.

0
23.03.2021, 10:52
1 ответ

Поскольку вы используете Debian, вы можете установитьbinfmt-supportи зарегистрировать расширение, используяupdate-binfmts:

sudo update-binfmts --install golang /tmp/test --extension go --credentials yes

Если это сработает, вы можете сохранить спецификацию binfmt_miscв файле под /usr/share/binfmts, что обеспечит ее загрузку при каждой загрузке системы:

cat <<EOF | sudo tee /usr/share/binfmts/golang
package <local>
interpreter /tmp/test
extension go
credentials yes
EOF

Чтобы проверить вышеуказанные работы, запустите

sudo update-binfmts --import golang

Кроме того, вы можете использовать поддержку systemd дляbinfmt_misc:

echo ':golang:E::go::/tmp/test:OC' | sudo tee /etc/binfmt.d/golang.conf

Это будет загружено при загрузке systemd-binfmt.service.

3
28.04.2021, 22:57

Теги

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