我们正在寻找一种解决方案,让电脑每周每天晚上 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
首先,root
crontabs 和用户 crontabs 不一样,不能用 编辑sudo crontab -e
。阅读原始/etc/crontab
文件。cronjobsroot
存储在/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.