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