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

标签 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"

运行脚本时,我在意外标记“then”附近出现语法错误。 任何帮助表示赞赏

编辑:我知道什么是 cronjob 以及如何设置它。 以下是 cronjob 不起作用的原因:

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

最佳答案

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

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

crontab -e

添加:

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

例如: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"

关于linux - 当没有用户登录时远程关闭Linux计算机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31558805/

相关文章:

linux - 在一个文件的行中搜索另一个文件中的部分匹配项(Mac/Linux/Unix 命令行)

linux - 启动位于子目录中的几个脚本

linux - Unix(BSD Unix, MacOSX) vs Linux登录setuid位区别

bash - Bash 中的密码管理

c - 自调用模块中的全局静态 int

linux - 需要使用linux命令删除cakephp脚本中的病毒代码

bash - 测试 glob 在 Bash 中是否有任何匹配项

linux - 我的 Bash 代码发生了什么?

perl - 如何使用 perl one-liner 作为别名

linux - 每天定时将文件从服务器A移动到服务器B的Shell脚本