с использованием overlay2 в CentOS 7.4

префиксируйте команду словом «command». Например,

command ls
-121--25728-

На странице bash :

  -c Если присутствует параметр -c, команды считываются из
первый неустранимый аргумент command_string. Если есть аргументы ‐
после command_string они присваиваются
позиционные параметры, начиная с $0.

И далее вниз:

  Если аргументы остаются после обработки опции, и ни -c, ни
Параметр -s был предоставлен, первый аргумент предполагается как
имя файла, содержащего команды оболочки. Если в этом вызывается bash
fashion, $0 устанавливается на имя файла и позиционный параметр ‐
ters устанавливаются в оставшиеся аргументы.

Короче говоря, поведение $0 зависит от способа вызова bash.

-121--119189-

Оболочка $! Переменная знает только pid процесса, запущенного оболочкой. Как и предполагалось, вызов ssh с использованием -f разворачивает собственный процесс, чтобы он мог перейти в фоновый режим, поэтому общее дерево процессов выглядит как [1]:

shell
|
+--ssh<1> (pid is $!)
   |
   +--ssh<2> (pid is different)

ssh < 1 > выходит очень скоро после вызова; поэтому значение в $! вряд ли пригодится. Это ssh < 2 > , который осуществляет удаленную связь и выполняет туннелирование для вас, и единственный способ надежно получить его PID - это проверка таблицы процессов, как вы делаете с pgrep [2]. Метод pgrep , скорее всего, здесь правильный.

Что касается того, почему он работает в сценарии, но не интерактивно, это, вероятно, условие гонки. Так как первый ssh находится в фоновом режиме, оболочка и ssh выполняются одновременно, и ssh выполняет некоторую криптографическую аутентификацию с умеренной интенсивностью ЦП и некоторые сетевые обходы. Вероятно, что pgrep , запущенный в сценарии, просто выполняется, прежде чем ssh < 1 > перейдет в фоновый режим. Чтобы обойти это, запустите pgrep позже, либо путем вызова sleep , либо просто вызвав его только тогда, когда в дальнейшем действительно потребуется PID.

[1]: Технически, это может быть сложнее, чем это, если ssh использует классическую двойную вилку на фоне. В этом случае между ними будет другой, эфемерный ssh процесс.

[2]: Если вы не systemd и не используете группы или что-то еще, чтобы держать трек всех ваших детей. Которой ты не являешься.

3
10.04.2018, 21:06
1 ответ
modprobe overlay;
lsmod | grep overlay

Сделать постоянным:

echo "overlay" > /etc/modules-load.d/overlay.conf;
reboot
0
27.01.2020, 21:46

Теги

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