在没有用户登录时远程关闭linux计算机

在没有用户登录时远程关闭linux计算机,linux,bash,shell,if-statement,ssh,Linux,Bash,Shell,If Statement,Ssh,我写了一个小脚本,每天更新许多Linux计算机(这就是为什么cron作业不能完成的原因)。 它意味着在夜间运行,并通过ssh连接到每个客户端,如果没有其他用户登录,则更新并关闭它。我提出的解决方案是: ssh "$value" 'apt-get update && apt-get -y upgrade && if [ $(who | wc -l) != 1 ] ; then exit; else poweroff; fi;' >> "/var/log/

我写了一个小脚本,每天更新许多Linux计算机(这就是为什么cron作业不能完成的原因)。 它意味着在夜间运行,并通过ssh连接到每个客户端,如果没有其他用户登录,则更新并关闭它。我提出的解决方案是:

ssh "$value" 'apt-get update && apt-get -y upgrade && if [ $(who | wc -l) != 1 ] ; then exit; else poweroff; fi;' >> "/var/log/updates/$value.log"
运行脚本时,在意外标记“then”附近出现语法错误。 谢谢你的帮助

编辑:我知道什么是cronjob以及如何设置它。 以下是cronjob无法完成的原因:

  • 并非所有用户在离开时都会打开电脑。所以我必须在晚上用WOL启动它们。如果客户机没有及时醒来,WOL->cron看起来毫无意义
  • 这应该在晚上进行,这样在需要重新启动时就不会中断工作
  • 如果我想在所有电脑上安装一个特定的工具,我也会使用这个脚本
  • 下面建议的修复无法解决语法问题。它也不会关闭电脑

无需ssh连接到每个客户端。您可以如下所示将下面的cronjob添加到每个客户端

cronjob添加到每天00.00午夜(运行此root或sudo用户)

加:

例:01与&&

cat run.sh

apt-get update && apt-get -y upgrade && if [ $(who | wc -l) != 1 ] ; then exit; else poweroff; fi;' >> "/var/log/updates/$value.log"
如果其中一个命令失败,那么随后的所有其他命令将不会执行

如果要执行所有命令,而不管以前的命令是否失败,请用分号分隔它们:

例:02与;命令

cat run.sh

apt-get update && apt-get -y upgrade ; if [ $(who | wc -l) != 1 ] ; then exit; else poweroff; fi;' >> "/var/log/updates/$value.log"

那晚上运行的
batch
at
作业呢?正如我所说,我会使用cronjob来实现这一点。但是,命令语法基本上应该可以工作。我无法重现语法错误。你确定你没有意外输入一些有问题的隐藏字符吗?尝试再次键入命令。我刚刚重新键入了它。没有变化。@KlausSteinhauer命令对我有效。你确定
bash
是远程机器上的默认shell吗?cron作业不会在断电的机器上启动我猜他想在晚上运行,而不是中午。抱歉,但是congobs work@night..更改properway中的内容
cat run.sh

apt-get update && apt-get -y upgrade && if [ $(who | wc -l) != 1 ] ; then exit; else poweroff; fi;' >> "/var/log/updates/$value.log"
cat run.sh

apt-get update && apt-get -y upgrade ; if [ $(who | wc -l) != 1 ] ; then exit; else poweroff; fi;' >> "/var/log/updates/$value.log"