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

时间:2015-07-22 09:12:27

标签: 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/updates/$value.log"

运行脚本时,我会在意外令牌附近出现语法错误'然后'。 任何帮助表示赞赏

编辑:我知道cronjob是什么以及如何设置它。 这就是cronjob不会做的原因:

  • 并非所有用户在离开时都会打开电脑。所以我将不得不使用WOL在晚上启动它们。 WOL - >如果客户没有及时醒来,cron似乎毫无意义。
  • 这应该在晚上完成,因此如果需要重新启动,不会中断任何工作。
  • 如果我想在所有PC上安装特定工具,我也会使用此脚本。
  • 下面建议的修复程序无法解决语法问题。它也不会关闭PC。

1 个答案:

答案 0 :(得分:0)

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

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

crontab -e

添加:

0 0 * * * root sh /home/user/run.sh

例如:01 with&&

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"