Jakie zadanie musisz wykonać i dlaczego dokładnie 4 godziny snu?
Thorbjørn Ravn Andersen
Odpowiedzi:
46
Służy sudodo uruchamiania powłoki roota, w której uruchamiane są polecenia:
sudo bash -c 'sleep 4h; command'
Każde polecenie działające w powłoce root działa z uprawnieniami roota, co sleepnie boli. Jeśli chcesz uruchomić polecenie z uprawnieniami użytkownika, użyj sudo -u USERNAME COMMANDnp .:
$ sudo bash -c 'sleep 4h; sudo -u dessert whoami; whoami'
dessert # whoami run as user dessert
root # whoami run as root
Tak, atjest właściwym narzędziem do tego zadania, ponieważ zajmuje się także przekierowaniem We / Wy, nie blokuje okna powłoki i działa nawet wtedy, gdy użytkownik się wylogował lub komputer został ponownie uruchomiony.
Simon Richter
4
@ SimonRichter: sudo bash -c 'sleep 4h && command' &umieszczenie sudo w tle jest łatwiejszym sposobem, aby nie blokować okna / karty powłoki. Jeśli chcesz , aby dane wyjściowe pojawiały się asynchronicznie dla przypomnienia, że tak się stało, to łatwiejsze. Nie działa przy ponownym uruchomieniu, ale w zależności od nohupustawień może pozostać uruchomiony po wyjściu / wylogowaniu z powłoki.
Peter Cordes
4
Zauważ, że aturuchamia polecenie, gdy tylko będzie w stanie, gdy system zostanie zawieszony w określonym czasie, patrz tutaj na U&L - w zależności od polecenia (poleceń), aby to uruchomić, może nie być to, czego chcesz.
deser
2
To tylko sugestia, możesz także użyć systemctl, aby sprawdzić status usługi, zamiast bezpośrednio wywoływać ten skrypt init.d. Chociaż oba wydają się mieć ten sam wynik, myślę, że należy preferować nowoczesny sposób interakcji z usystematyzowanymi usługami:systemctl status atd
Byte Commander
15
Jednym ze sposobów jest uruchomienie za pomocą shellscript z sudouprawnieniami (i podanie hasła podczas uruchamiania shellscript), jeśli shellscript znajduje się w bieżącym katalogu,
sudo ./delayer 4h
gdzie delayermoże być skrypt powłoki z zawartością
#!/bin/bash
sleep "$1"
command
Zrób to za pomocą
chmod +x delayer
i skopiuj lub przenieś go do katalogu, PATHjeśli chcesz.
Jeśli potrzebujesz bardziej elastycznego skryptu powłoki, w którym możesz wybrać polecenie [wiersz], aby opóźnić wprowadzając parametry, możesz spróbować
Cóż, jeśli jest to /bin/shskładnia, wszystko będzie dobrze. Ale jeśli zamierzasz używać funkcji specyficznych dla bash, konieczny jest shebang. Ja i steeldriver gdzieś o tym rozmawialiśmy. Aaand Videonauth usunął swój komentarz, zanim mogłem poprawnie odpowiedzieć. No cóż
Sergiy Kolodyazhnyy
@SergiyKolodyazhnyy, masz rację. Tak więc w tym przypadku shebang ma sprawić, że skrypt powłoki będzie niezawodny w przypadku dodanych funkcji, w których składnia może się różnić.
sudodus
@SergiyKolodyazhnyy Cóż, to była tylko sugestia, więc pomyślałem, że zostawienie komentarza nie jest konieczne i tylko zwiększy bałagan. Zapraszam do
kontaktu ze
2
Innym sposobem byłoby rozpoczęcie sesji interaktywnej sudo z sudo -s(nie zmienia katalogu) lub sudo -i(zmienia bieżący katalog na główny katalog główny), a następnie wpisać polecenia (bez sudo)
shutdown
. polecenie sudo i odpowiednie argumenty, aby zaplanować sen o określonej godzinie.Odpowiedzi:
Służy
sudo
do uruchamiania powłoki roota, w której uruchamiane są polecenia:Każde polecenie działające w powłoce root działa z uprawnieniami roota, co
sleep
nie boli. Jeśli chcesz uruchomić polecenie z uprawnieniami użytkownika, użyjsudo -u USERNAME COMMAND
np .:Innym podejściem byłoby użycie,
sudo visudo
aby umożliwić wykonanie polecenia bez dostępu do konta root, zobacz: Jak zezwolić na wykonanie bez pytania o hasło przy użyciu sudo?Pamiętaj, że w zależności od polecenia może to spowodować lukę w zabezpieczeniach.
źródło
Zakładając, że chcesz uruchomić proces tylko raz (nie np. Co 4 godziny), możesz użyć
atd
/etc/init.d/atd status
lub lepiejsystemctl status atd
)Na terminalu jako root uruchom następującą komendę:
Jeśli chcesz uruchamiać go co 4 godziny, możesz również użyć crona (jako root) z następującą konfiguracją w twoim crontabie
źródło
at
jest właściwym narzędziem do tego zadania, ponieważ zajmuje się także przekierowaniem We / Wy, nie blokuje okna powłoki i działa nawet wtedy, gdy użytkownik się wylogował lub komputer został ponownie uruchomiony.sudo bash -c 'sleep 4h && command' &
umieszczenie sudo w tle jest łatwiejszym sposobem, aby nie blokować okna / karty powłoki. Jeśli chcesz , aby dane wyjściowe pojawiały się asynchronicznie dla przypomnienia, że tak się stało, to łatwiejsze. Nie działa przy ponownym uruchomieniu, ale w zależności odnohup
ustawień może pozostać uruchomiony po wyjściu / wylogowaniu z powłoki.at
uruchamia polecenie, gdy tylko będzie w stanie, gdy system zostanie zawieszony w określonym czasie, patrz tutaj na U&L - w zależności od polecenia (poleceń), aby to uruchomić, może nie być to, czego chcesz.systemctl status atd
Jednym ze sposobów jest uruchomienie za pomocą shellscript z
sudo
uprawnieniami (i podanie hasła podczas uruchamiania shellscript), jeśli shellscript znajduje się w bieżącym katalogu,gdzie
delayer
może być skrypt powłoki z zawartościąZrób to za pomocą
i skopiuj lub przenieś go do katalogu,
PATH
jeśli chcesz.Jeśli potrzebujesz bardziej elastycznego skryptu powłoki, w którym możesz wybrać polecenie [wiersz], aby opóźnić wprowadzając parametry, możesz spróbować
Przykład demonstracji (krótkie opóźnienie, 5 s, do celów demonstracyjnych),
źródło
/bin/sh
składnia, wszystko będzie dobrze. Ale jeśli zamierzasz używać funkcji specyficznych dla bash, konieczny jest shebang. Ja i steeldriver gdzieś o tym rozmawialiśmy. Aaand Videonauth usunął swój komentarz, zanim mogłem poprawnie odpowiedzieć. No cóżInnym sposobem byłoby rozpoczęcie sesji interaktywnej sudo z
sudo -s
(nie zmienia katalogu) lubsudo -i
(zmienia bieżący katalog na główny katalog główny), a następnie wpisać polecenia (bez sudo)źródło