使用 Crontab 显示消息

使用 Crontab 显示消息

我们正在寻找一种解决方案,让电脑每周每天晚上 8 点关机

电脑有多个用户账户,但始终只有一个人使用它。由于公司内部的工作不同,因此会有多个账户。

例如,人员 1 使用帐户 A,但人员 2 拥有自己的电脑,但具有相同的图像,由于具有不同的功能,因此登录到另一个帐户。人员 1 只登录他的帐户,人员 2 也只登录她的帐户。因此,一台电脑,多个帐户,但每次仍为一个用户。

使用 Crontab(在管理员帐户中)是让所有用户都能使用此功能的最佳方法。
现在我们还希望在晚上 7:50 出现一条消息(如警报或通知发送或 zenity)以警告用户关机。(谁也无法阻止它)。

我知道不可能向 Crontab 询问* * * * * /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 

(是的,百分之百确定这是正确的目录)它不起作用。

那么有人能告诉我我的.sh文件应该是什么样子以及如何将其添加到 crontab 以使其工作吗?

答案1

示例脚本用于让所有用户登录并向他们发送警告。第一次运行脚本后,必须检查日志以查看 cut 字段是否需要调整,因为输出可能存在差异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

答案2

首先,rootcrontabs 和用户 crontabs 不一样,不能用 编辑sudo crontab -e。阅读原始/etc/crontab文件。cronjobsroot存储在/etc/cron.d/etc/cron.daily/etc/cron.hourly /etc/cron.monthly和 中。它们由不同的格式(它有一个字段)/etc/cron.weekly控制,而不是由 创建的文件。 /etc/crontabuserid/var/spool/cron/crontabs/rootsudo 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.

相关内容