То, что получится, зависит от вашей конкретной реализации команды 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
.
systemctl
. справочные страницы systemd. freedesktop.org. Если вы используете набор инструментов nosh, вывод будет выводом system-control status
, который скрыто вызывает команда набора инструментов service
nosh:
% 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 %
service
. Направляющая ноша . Программное обеспечение. system-control
. Направляющая ноша . Программное обеспечение. Если вы используете Upstart в качестве диспетчера служб,вывод будет выводом команды initctl status
Upstart, которую поставляла (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.
status
. Руководство пользователя Upstart. Убунту. initctl status
". Поваренная книга выскочки . Убунту. Если вы используете OpenRC, вывод будет выводом OpenRC rc-service status
, который service
является просто псевдонимом для:
% rc-service nginx status * status: started %
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 ни с одним из них, которые всегда будут вести себя так же, как и для своих родных служб, как все работает.)
Только что проверил это локально с помощью :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
Строка, которую вы хотите передать вашей команде 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'