sh sys-snap.sh &
Co to jest sh
? Co to jest sys-snap.sh
? Dlaczego powinienem umieścić &
na końcu linii? Czy ktoś może wyjaśnić składnię?
Bez &
skryptu nie wróci do monitu, dopóki nie naciśnie Ctrl+ C. Z &
mogę nacisnąć Enter i to działa.
sh sys-snap.sh &
Co to jest sh
? Co to jest sys-snap.sh
? Dlaczego powinienem umieścić &
na końcu linii? Czy ktoś może wyjaśnić składnię?
Bez &
skryptu nie wróci do monitu, dopóki nie naciśnie Ctrl+ C. Z &
mogę nacisnąć Enter i to działa.
Odpowiedzi:
sh
jest domyślną powłoką kompatybilną z Bourne (zwykle bash lub dash)
sys-snap.sh
to skrypt powłoki, który zawiera polecenia, które sh
wykonuje. Ponieważ nie publikujesz jego treści, mogę tylko zgadywać z jego nazwy, co robi. Mogę znaleźć skrypt związany z CPanel o tej samej nazwie, który tworzy plik dziennika ze wszystkimi bieżącymi procesami, bieżącym zużyciem pamięci, statusem bazy danych itp. Jeśli skrypt zaczyna się od linii shebang ( #!/bin/sh
lub podobnej), możesz go wykonać za pomocą chmod +x sys-snap.sh
i uruchom go bezpośrednio, używając, ./sys-snap.sh
jeśli znajduje się w bieżącym katalogu.
Dzięki &
proces rozpoczyna się w tle, dzięki czemu można nadal używać powłoki i nie trzeba czekać aż skrypt zostanie zakończony. Jeśli go zapomnisz, możesz zatrzymać bieżący proces za pomocą Ctrl-Z
i kontynuować w tle za pomocą bg
(lub na pierwszym planie za pomocą fg
). Aby uzyskać więcej informacji, zobacz Kontrola zadań
sh
w zwykle tylko bash
albo dash
w systemach opartych na Linux (lub ostatnim OS / X). W przypadku BSD jest to zwykle inny wariant Ash (dash jest oparty na NetBSD sh, sam oparty na Almquist Shell) lub pochodnej pdksh. W komercyjnych Unices jest to zazwyczaj ksh88.
&
a zatem w tle, pojawi się tylko nowy monit powłoki.
&&
różnią się od pojedynczych znaków handlowych &
?
Jest to znane jako job control
UNIX. &
Informuje powłokę, aby umieścić polecenia w tle. Oznacza to, że nadal uruchamia sys-snap.sh
polecenie, ale wraca do powłoki, umożliwiając kontynuowanie wykonywania poleceń równoległych.
Możesz zobaczyć listę zadań aktualnie uruchomionych z jobs
poleceniem. Możesz powrócić do polecenia (przenieść na pierwszy plan) za pomocą fg
polecenia. Który powoduje powrót polecenia do stanu, w którym nie widzisz monitu i musisz go wydać Ctrl- Caby zabić proces. Możesz jednak zawiesić (wstrzymać) ten proces, wydając Ctrl- Z. Spowoduje to wstrzymanie sys-snap.sh
i powrót do monitu. Można wtedy tło to (tak, jakbyś wydał go z&
) z bg
polecenia i będzie wznowić działa od jego przerwał stan ten Ctrl- Zwłożył go.
Pamiętaj, że możesz mieć więcej niż jedno zadanie na raz (jak pokazano przez jobs
):
[1]- Running sys-snap.sh &
[2]+ Running another-script.sh &
Możesz je w tle i na pierwszym planie, używając ich numeru zadania, %1
będzie sys-snap.sh
i %2
będzie another-script.sh
. Jeśli użyjesz argumentów fg
lub bg
bez nich, wykona polecenie dla zadania oznaczonego przez +
w jobs
powyższym wyniku.
fg %1
będzie można umieścić sys-snap.sh
z powrotem na pierwszy plan, pozostawiając another-script.sh
w tle.
Możesz wydać sekwencję Ctrl- Cdo uruchomionych zadań bez konieczności przedkładania ich za pomocą kill
polecenia, kill %1
wyśle odpowiednik Ctrl- Cdo sys-snap.sh
.
Jeśli używasz powłoki bash, man bash
polecenie zawiera szczegółową sekcję pod sekcją „KONTROLA ZADAŃ”, która zawiera bardziej szczegółowe informacje.
Jeśli chodzi o nazwę sys-snap.sh
, pod uniksowymi nazwami plików są dowolne (z kilkoma wyjątkami, takimi jak dynamiczne pliki ładujące). Nie ma wymogu posiadania określonych rozmiarów plików, aby działały one jako skrypt powłoki, wywoływały inne polecenia, takie jak perl
lub php
itp. Zwykle służy do zapewnienia jasności, że w tym przypadku jest .sh
to skrypt powłoki korzystający z powłoki Bourne'a /bin/sh
.
Funkcjonalną częścią sys-snap.sh
(gdy patrzysz na jej zawartość za pomocą czegoś takiego jak less
polecenie) jest Shebang . W pierwszym wierszu prawdopodobnie znajdziesz jeden z:
#! /bin/sh
#! /bin/bash
#! /usr/local/bin/bash
lub podobne. Mówiąc najprościej, polecenie po #!
(np. /bin/sh
) Jest uruchamiane, a zawartość reszty pliku skryptu jest podawana do niego po linii na raz. Należy pamiętać, że plik musi być również ustawiony na wykonywalny chmod
, aby można go było uruchomić jako polecenie. Jeśli uprawnienia nie zostały ustawione, shebang
nie ma to wpływu, ponieważ albo wystąpiłby błąd:
bash: sys-snap.sh: command not found
lub jeśli uruchomiłeś go jawną ścieżką ./sys-snap.sh
( .
co oznacza bieżący katalog roboczy), otrzymasz:
bash: ./sys-snap.sh: Permission denied
Inną alternatywą jest pozostawienie go bez wykonywania uprawnień i wyraźne poproszenie / bin / sh o uruchomienie:
/bin/sh sys-snap.sh &
nohup
, co robi, ponieważ jest często używane w połączeniu z, &
aby rozpocząć proces i być w stanie zabić powłokę, która uruchomiła go bez zabijania procesu.
jobs
to zawsze zwróci puste, jeśli jest to pierwsze polecenie?
&
na końcu polecenia powoduje jedynie odłączenie stdin
(ale nie stdout
lub stderr
), co oznacza, że jeśli twoje polecenie / skrypt działa w tle, ale pisze do stdout
, możesz napotkać sytuację, w której Ctrl + c
nie zatrzyma wyjścia, ale będziesz w stanie wpisywać polecenia. Wynika to z tego, że proces w tle pisze do, stdout
ale nie można go zatrzymać, ponieważ nie działa na pierwszym planie. Więcej informacji tutaj .
sh
jest skorupą. Która skorupa dokładnie zależy od systemu. Przykład dla systemu, który używa bash
jako standardowej powłoki:
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 13 16:12 /bin/sh -> bash
$ sh --version
GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)
sys-snap.sh
będzie pewnego rodzaju skryptem powłoki, więc sh sys-snap.sh
wykona skrypt powłoki.
&
spowoduje uruchomienie procesu powłoki w tle. Bez &
tego pozostanie na pierwszym planie, dopóki skrypt się nie skończy. Skrypt będzie działał w obu kierunkach, jest to tylko kwestia oczekiwania na zakończenie skryptu lub nie przed wykonaniem kolejnych poleceń.
Czy twój serwer jest hostgatorem?
Skrypt sys-snap.sh
jest specjalnym skryptem napisanym przez zespół hostgatora w celu zebrania wszystkich plików dziennika i danych dla systemu, więc wykorzystują jego dane wyjściowe do monitorowania i zbierania informacji o systemie.
&&
różnią się od pojedynczych znaków handlowych&
?