Отображение сообщения с 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.