答案1
不幸的是,您没有指定您的具体要求,因此很难知道您到底需要什么。
但是使用 shell 脚本几乎一切皆有可能。我有一个 shell 脚本,一旦特定客户端(CLIENTS 变量中以空格分隔的列表)不再在线并且某些进程(PROCESSES 变量中以空格分隔的列表)在最后 3 次检查中未运行,它就会关闭计算机:
#!/bin/sh
LOGFILE=/var/log/autoshutdown.log
CLIENTS="hanzo twix"
PROCESSES="screen"
CHECK_THRESHOLD=3
CHECK_COUNT_FILE=/tmp/autoshutdown_count
FALSE=1
TRUE=0
function log() {
typeset message="$1"
echo "$(date +'%Y-%m-%d %H:%M:%S') $message" >> $LOGFILE
}
function clientsOnline() {
typeset flag_online=$FALSE
for client in $CLIENTS
do
if ping -c 1 $client 1>/dev/null 2>/dev/null
then
#log "Client $client is online."
flag_online=$TRUE
else
#log "Client $client is offline."
true
fi
done
return $flag_online
}
function processRunning() {
typeset process_flag=$FALSE
for process in $PROCESSES
do
if ps -e | grep -qs $process
then
#log "Process $process is running."
process_flag=$TRUE
else
#log "Process $process is not running."
true
fi
done
return $process_flag
}
function resetShutdownCounter() {
echo "0" > $CHECK_COUNT_FILE
}
function getShutdownCount() {
if [ -r $CHECK_COUNT_FILE ]
then
cat $CHECK_COUNT_FILE | head -n 1
else
echo 0
fi
}
function incrementShutdownCounter() {
echo $(expr $(getShutdownCount) + 1) > $CHECK_COUNT_FILE
}
if [ $(id -u) -ne 0 ]
then
echo "This script must be run as root user." >&2
exit 1
fi
#log "### Starting ###"
if clientsOnline
then
#log "At least one client is online. Reseting shutdown count."
resetShutdownCounter
elif processRunning
then
#log "At least one of the registered processes is running. Reseting shutdown count."
resetShutdownCounter
else
incrementShutdownCounter
log "No registered client online. Shutdown counter incremented. Current value: $(getShutdownCount)"
if [ $(getShutdownCount) -ge $CHECK_THRESHOLD ]
then
log "Shutdown count threshold reached. Shutting down system in 10 seconds."
rm -f $CHECK_COUNT_FILE
/sbin/shutdown -h 1
fi
fi
您所要做的就是每 5 分钟从 crontab 运行一次此脚本。然后,如果连续 15 分钟满足关机条件,它就会关闭您的计算机。
答案2
事实上,这很简单。
要关闭 Linux 机器,您只需从命令行或脚本执行“/sbin/telinit 6”(以 root 身份!)即可。这将有序地关闭所有进程并通过 BIOS 关闭电源。请注意,这并非适用于所有主板,但在 99% 的情况下确实如此。
有很多方法可以实现自动化...我不知道有任何自动化软件包,但自己创建一个并不难。我假设您正在使用服务器和台式机/笔记本电脑进行工作。例如,如果您希望在关闭 Windows 桌面后自动关闭 Linux 系统,则可以编写一个脚本,每 5 分钟 ping 一次 Windows 机器。如果连续 3 次失败,则关闭机器。另一种可能性是网页,只能从您的本地局域网访问,以启动(延迟)关机;您只需确保在 Windows 关闭时调用该页面即可。等等...
答案3
至于在特定时间关机,你可以通过在 /etc/crontab 中添加条目来轻松完成
30 2 * * * 根 /sbin/shutdown -h 0
这样系统将在每天凌晨 2:30 关闭。
一些 BIOS 允许您设置系统在特定时间开机,这是除局域网唤醒之外的另一种选择。
答案4
如果您使用 Gnome,另一种机制(添加到其他人的回应)是 gnome-power-cmd.sh:
gnome-power-cmd.sh {暂停 | 关机 | 休眠 | 重启}
它似乎使用 DBUS。不过,如果你打算运行没有 Gnome 的服务器,我不知道这会有多大用处。