win10 中 WSL 中的 crontab 中的“/usr/sbin/shutdown now”不起作用

win10 中 WSL 中的 crontab 中的“/usr/sbin/shutdown now”不起作用

最近开始使用win10和WSL。

我想让 crontab 运行以下命令。

/usr/sbin/shutdown now

但即使该命令在 Linux 操作系统中有效,它也不起作用(我已经检查过了)。

我之所以要这么做是因为,由于隔壁的人告诉我晚上要保持安静(CPU 风扇的噪音?),所以我想在晚上强制关闭计算机。

下一步我该做什么?

我确切想要做的如下。

  1. 由于计算机在22:00~05:59期间启动,所以shutdown会执行该命令,导致用户登录失败。
  2. 由于计算机启动时没有指定时区,因此计算机引导我登录并执行shutdown at 2200

如果 WSL 真的不能做到这一点,我该如何使用任务调度程序或其他东西来实现呢?

答案1

不幸的是,您在问题中做出的许多假设根本行不通。我将在下面逐一介绍。虽然 Super User 上的其他问题和答案涵盖了这些信息,但“汇总”所有信息可能很困难。因此,虽然有人可能会认为这是这些问题的“重复”(就像我最初那样),但它可能需要自己的答案来汇总所有其他相关答案。

那么,让我们逐一解决这个问题:

  1. 您正在尝试获取 cron 在WSL下工作

    这里的问题是,WSL 并非设计为在启动时“启动”服务,因为没有 WSL“启动”的概念。请参阅这个问题以获取有关这方面的更多信息。

  2. 您正在尝试通过 Linux 关闭 WSL shutdown 命令

    WSL 是一个虚拟化环境,无法直接控制硬件。WSL 中的 Linux/usr/sbin/shutdown命令无法访问主机硬件。关闭 WSL 本身的正确方法是运行wsl --shutdown(从 PowerShell、CMD 或“开始”菜单)。这在这个问题,尽管由于它早于wsl,所以您必须查看第二个答案。

  3. 您正在尝试通过 Linux 关闭 Windows shutdown 命令

    正如评论中提到的,WSL 的生命周期与 Windows 不同。WSL 是运行Windows。关闭 WSL 环境(在某种程度上)就像使用 File->Exit 或Alt+退出记事本一样F4。您不会期望在关闭记事本时 Windows 会关闭,也不应该期望在关闭 WSL 时 Windows 会关闭。

    要关闭 Windows,请shutdown.exe参阅许多其他超级用户问题


您的真正问题在最下面——如何使用任务计划程序执行此操作。 这个问题首先介绍如何在任务计划程序中使用shutdown.exe。至少可以在 22:00 运行关机。

那么听起来你还想有一些东西来检查用户是否试图在“安静时间”之间登录并阻止它。这涵盖在这个答案使用 Windowsnet user /time命令。另请参阅此处的其他答案,以了解更多有关您要执行的操作的信息。

最后,如果 Windows 在安静时间启动,您需要关闭它。这也应该通过shutdown.exe任务计划程序中每隔一段时间重复的任务来完成。Super User 上的多个答案涵盖了此类任务,但这是一个以供参考。

相关内容