Получение размера каталога и сохранение его в переменной

Стандарта нет.

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

системд

Если вы запускаете systemd в качестве диспетчера служб, вывод будет выводом systemd systemctl status, который (новая команда Debian/Ubuntu -, поставляемая )service, вызывает скрыто :

% systemctl status nginx.service
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2015-08-12 20:16:25 CEST; 23s ago
  Process: 24221 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)
 Main PID: 17425 (code=exited, status=0/SUCCESS)
% 

. ]

Это будет иметь место в операционных системах systemd (, которые не были переключены на что-то другое ), например Ubuntu 15 и более поздних версий и Debian 8 и более поздних версий.

Второстепенный вариант заключается в том, что иногда не существует настоящего файла сервисной единицы systemd, и в этом случае systemd изобретает файл (, который является оберткой для файла ван Смуренбурга rc), и строка Loaded:будет слегка видна по-другому (, потому что генератор systemd для таких модулей скрывает имя файла модуля-оболочки в пользу обернутого имени файла Ван Смуренбурга rc).

Вы явно используете не операционную систему systemd, а новую команду Debian/Ubuntu service.

Дополнительная литература

нош

Если вы используете набор инструментов nosh, вывод будет выводом system-control status, который скрыто вызывает команда набора инструментов servicenosh:

% service appcafe-nginx status
/var/sv/appcafe-nginx: 
    State   : running since 2019-01-12 17:58:09 +0000; 16h 33m 42s ago
    Main PID: 980
     Started: exit 0 at 2019-01-12 17:58:06 +0000; 16h 33m 45s ago
         Ran: exit 0 at 2019-01-12 17:58:09 +0000; 16h 33m 42s ago
    Config  : enabled
%

Дополнительная литература

  • Джонатан де Бойн Поллард (2019 ).service. Направляющая ноша . Программное обеспечение.
  • Джонатан де Бойн Поллард (2019 ).system-control. Направляющая ноша . Программное обеспечение.

Выскочка

Если вы используете Upstart в качестве диспетчера служб,вывод будет выводом команды initctl statusUpstart, которую поставляла (Debian/Ubuntu -, старая)serviceкоманда вызывается под прикрытием, как вы видели:

% initctl status nginx
nginx start/running, process 2543
% 

Это относится к операционным системам Upstart, таким как Ubuntu 6 — Ubuntu 14 и Fedora 9 — Fedora 14.

Недостаток заключается в том, что в Ubuntu, если нет определения задания Upstart для службы, (старая команда Debian/Ubuntu -, поставляемая )service, отменяет вызов initctl statusи ведет себя как набор инструментов van Smoorenburg. ведет себя.

Именно это происходило в вашей системе до тех пор, пока вы не обновили пакет nginx до более нового, который теперь включает определение задания Upstart для nginx. Раньше вызывался резервный вариант; теперь это не так. Файл задания Upstart добавлен в nginx версии 1.9.

Дополнительная литература

  • Скотт Джеймс Ремнант (2009 ).status. Руководство пользователя Upstart. Убунту.
  • "initctl status ". Поваренная книга выскочки . Убунту.
  • Кэмерон Норман (2014 -04 -22 ).Задание nginx Upstart. Ошибка Debian #745483.

OpenRC

Если вы используете OpenRC, вывод будет выводом OpenRC rc-service status, который serviceявляется просто псевдонимом для:

% rc-service nginx status
 * status: started
%

Дополнительная литература

  • Рой Марплс (2009 -05 -01 ).rc-service. OpenRC.

ван Смуренбургrc

Если вы используете набор инструментов van Smoorenburg, выходные данные будут такими, какие печатает сам скрипт rcпри вводе подкоманды status. В большинстве случаев, особенно начиная с Debian 9, это будет вывод общей вспомогательной команды, которая обрабатывает печать состояния для большинства сценариев rc. Но это может быть что угодно, и это полностью зависит от того, как скрипт решит обработать подкоманду.

Сценарий van Smoorenburg rc, поставляемый в пакете Debian nginx, использует помощник Debian status_of_procиз его /lib/lsb/init-functionsбиблиотеки функций сценария оболочки:

% status_of_proc -p /var/run/nginx.pid /usr/sbin/nginx nginx
* nginx is running
%

Ubuntu не использует van Smoorenburg init+ rcс 2006 года, поэтому любое появление поведения van Smoorenburg rcс командой (Debian/Ubuntu -, поставляемой )service, будет зависеть от вышеупомянутая морщина Upstart. Старая команда ()serviceне сможет обнаружить задание Upstart и вернется к обработке вещей как van Smoorenburg rc. (Обратите внимание, что такого запасного варианта нет с systemd или nosh, и вы никогда никогда не увидите поведения ван Смуренбурга rcв Ubuntu ни с одним из них, которые всегда будут вести себя так же, как и для своих родных служб, как все работает.)

Дополнительная литература

1
10.02.2021, 21:12
2 ответа

Только что проверил это локально с помощью :size=$(ssh xxx@yyy "du -hs./.config | cut -f 1") ; echo $size

и получил правильный вывод в моем терминале:

size=$(ssh xxx@yyy "du -hs./.config | cut -f 1") ; echo $size
8.0K
0
18.03.2021, 22:31

Строка, которую вы хотите передать вашей команде SSH, это:

size=$(du -hs /some/dir | awk '{print $1}'; echo ${size} ; bash --login

Вы должны защитить некоторые символы этой строки от начала интерпретируемых:$и'.

  • Хороший способ защитить$состоит в том, чтобы использовать простые кавычки ', потому что двойные кавычки "не помогут:

    'blah blah "blah blah" blah' # sounds easy
    
  • Защита простых кавычек немного сложнее, если вы используете простые кавычки для окружения строки :один из способов — поставить перед простыми кавычками закрывающую простую кавычку (да ), затем окружить простую кавычку двойными кавычками"и, в конце концов, снова открыть простой кавычкой:

    'blah blah '"'"'blah blah'"'"' blah' # mmh well
    

Кроме того, вы хотели напечатать первое поле с awk, а не второе. Итак, print $1, а не print $2.

Вот ваша хорошо -защищенная линия:

ssh root@remoteIP -t 'size=$(du -hs /some/dir | awk '"'"'{print $1}'"'"')
                      echo ${size} ; bash --login'
0
18.03.2021, 22:31

Теги

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