Отображение сообщения с Crontab

Мы ищем решение, которое каждый день недели выключает компьютер в 8 часов вечера.

На компьютере есть несколько учетных записей, но его всегда будет использовать только один человек. Там будет несколько учетных записей из-за различных рабочих мест внутри компании.

Ex. Человек 1 использует учетную запись A, но человек 2, у которого есть собственный компьютер, но с тем же изображением, входит в другую учетную запись, потому что у него другая функция. Человек 1 только теперь входит в свою учетную запись, а человек 2 также только для своей учетной записи. Таким образом, 1 ПК, несколько учетных записей, но все еще один пользователь одновременно.

Использование Crontab (в учетной записи администратора) было лучшим способом разрешить эту работу для всех пользователей.
Теперь мы также хотим, чтобы в 19 ч.50 м. Появилось сообщение (например, уведомление или отправка уведомления или zenity), чтобы предупредить пользователя о завершении работы. (КТО НЕ МОЖЕТ ПРЕДОТВРАТИТЬ ЕГО).

Я знаю, что невозможно спросить у Кронтаба * * * * * /path/to/notify-send "Pc will shut down".
Мы попробовали .sh со следующим кодом:

   #!/bin/sh
   DISPLAY=:0.0
   /usr/bin/notify-send 'shutdown warning'

(Предупреждение о выключении не то, что мы хотим, а только для теста ".

Мы протестировали этот.sh в терминале и без ошибок. Работает отлично. Когда мы добавим его в Crontab, вот так:

  sudo contrab -e

  * * * * * /home/administrator/sluiten.sh 

(и да, это на 100 процентов уверен, что правильный каталог) это не работает.

Так может кто-нибудь, пожалуйста, скажите мне, что мой .sh файл должен выглядеть и как добавить его в crontab, чтобы он работал?

2 ответа

Решение

Пример сценария для входа всех пользователей в систему и отправки им предупреждения. После первого запуска сценария необходимо проверить журнал, чтобы увидеть, нужно ли корректировать поле среза из-за возможных различий в whoвыходной. При последующем использовании линии эхолота могут быть закомментированы. Цикл while является избыточным для однопользовательской системы, но может оказаться полезным.

#!/bin/bash
###
USERLIST=($(who | sed -e 's/[)(]//g' -e 's/  */ /g' | cut -d ' ' -f1,5 | sort -u | tr -d '\n'))
LOG=/tmp/"$(basename $0)".log
###
echo "$(who | sed -e 's/[)(]//g' -e 's/  */ /g')" >> $LOG
echo "${USERLIST[@]}" >> $LOG
C=0
while [ $C -lt ${#USERLIST[@]} ]
    do
        D=$((C + 1))
        export DISPLAY="${USERLIST[$D]}"
        export XAUTHORITY="/home/${USERLIST[$C]}/.Xauthority"
        export XDG_RUNTIME_DIR=/run/user/$(id -u ${USERLIST[$C]})
        /usr/bin/notify-send 'shutdown warning'
        C=$((C + 2))
    done

Первый, root crontabs не похожи на пользовательские crontabs и НЕ редактируются с sudo crontab -e, Читать оригинал /etc/crontab файл. root cronjobs хранятся в /etc/cron.d, /etc/cron.daily, /etc/cron.hourly/etc/cron.monthly, а также /etc/cron.weekly, Они контролируются с разным форматом /etc/crontab (оно имеет userid поле), а не /var/spool/cron/crontabs/root файл создан sudo crontab -e,

Чтобы ответить на ваш вопрос, см. man shutdown:

xenial (8) shutdown.8.gz
Provided by: upstart-sysv_1.13.2-0ubuntu21_i386 

NAME
       shutdown - bring the system down

SYNOPSIS
       shutdown [OPTION]...  TIME [MESSAGE]

DESCRIPTION
       shutdown arranges for the system to be brought down in a safe way.  All
       logged-in users are notified that the system is going down and,  within
       the last five minutes of TIME, new logins are prevented.
Другие вопросы по тегам