Jak zamknąć serwer Ubuntu ze skryptu powłoki?

0

Napisałem prosty skrypt powłoki, aby zamknąć serwer Ubuntu. Następnie stworzyłem zadanie crona do wykonywania tego skryptu codziennie o 23:59.

#!/bin/bash
sudo shutdown -h now

Otrzymałem ten komunikat o błędzie:

sudo: no tty present and no askpass program specified

kiedy usunąłem sudo z kodu, otrzymałem inny komunikat o błędzie:

/home/qinking126/scripts/test.sh: line 3: shutdown: command not found

Jak to rozwiązać?

qinking126
źródło

Odpowiedzi:

3

Upewnij się, że skrypt cron jest uruchomiony jako root i zastąp shutdowngo pełną ścieżką podaną przez:

command -v shutdown

W systemie Ubuntu GNU / Linux (i ogólnie GNU / Linux) powinno to być /sbin/shutdown:

#!/bin/bash
/sbin/shutdown -h now

Pamiętaj, że dodanie pliku o nazwie podobnej /etc/cron.d/midnight-shutdowni zawierającego:

59 23   * * *   root    test -x /sbin/shutdown && /sbin/shutdown -h now

powinieneś robić, co chcesz bez narzutu pełnego skryptu bash. Oto kod, aby szybko to zainstalować:

echo '59 23 * * *   root    test -x /sbin/shutdown && /sbin/shutdown -h now' \
    | sudo tee '/etc/cron.d/midnight-shutdow'
sudo service cron reload

EDYCJA: Aby odpowiedzieć na Twój komentarz, inną możliwością ustawienia jest:

echo '59 23 * * *   test -x /sbin/shutdown && /sbin/shutdown -h now' \
    | sudo tee '/etc/cron.d/midnight-shutdow'
sudo service cron reload

To dziwne, że cron wydrukował ci ten komunikat o błędzie.

Biapy
źródło
dostałem ten komunikat o błędzie „/ bin / sh: 1: root: not found”
qinking126
dodano inną możliwość ustawienia.
Biapy
0

Możemy również użyć polecenia „sudo halt”, aby wyłączyć serwer Ubuntu.

vembutech
źródło