Я написал простой сценарий оболочки для выключения сервера Ubuntu. Затем я создал задание cron для выполнения этого скрипта каждый день в 23:59.

#!/bin/bash
sudo shutdown -h now

Я получил это сообщение об ошибке:

sudo: no tty present and no askpass program specified

Когда я удалил sudo из кода, я получил другое сообщение об ошибке:

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

Как мне решить это?

2 ответа2

3

Убедитесь, что скрипт cron запущен от имени пользователя root, и замените shutdown на полный путь, указанный вам:

command -v shutdown

В Ubuntu GNU/Linux (и GNU/Linux в целом) это должен быть /sbin/shutdown :

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

Обратите внимание, что добавление файла с именем вроде /etc/cron.d/midnight-shutdown и содержащего:

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

должен делать то, что вы хотите, без лишних затрат полного сценария bash. Вот код для быстрой установки:

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

РЕДАКТИРОВАТЬ: Чтобы ответить на ваш комментарий, еще одна возможность настройки:

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

Довольно странно, что cron выдает вам это сообщение об ошибке.

0

Мы также можем использовать команду "sudo halt" для выключения Ubuntu Server.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .