我编写了一个小脚本来每天更新一些 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/