如何在 Guix 中在指定的未来时间运行一次性命令?

如何在 Guix 中在指定的未来时间运行一次性命令?

我想在将来的某个特定时间在 Guix 上运行一次 shell 命令。我的想法是使用该at命令,但这似乎在 Guix 上不可用。

我的愿望的命令性在某种程度上违背了 Guix 的声明性哲学,我期望这是(间接)原因at不可用。

例如,at需要atrunatd正在运行,这可能不太适合 Guix 的做事方式。

是否有一种我还没有找到的 Guix 特定方式可以在特定时间运行命令?

目前我可以只做一个sleep xxx; cmd,现在应该足够好了。


这是我的解决方案,基于 @GAD3R 建议使用mcron,以及关于如何模拟的手册at

~/.config/hello.guile:

(job '(next-minute-from (current-time) '(25))
     (lambda () (system "echo $(date) >> ~/hello.txt")
                (kill (getppid) SIGINT)))

然后打电话mcron

~/hello.txt这确实在整点 25 分钟处增加了一条线路。

它比使用需要更多的工作at,但它确实有效。

我可以看到两个潜在的改进:

  • 似乎job只是需要一个返回 unix 时间戳作为第一个参数的函数。所以我认为给它所需的确切时间戳是可行的。这也可能会让杀戮部分变得多余。

  • 我想,与其mcron手动调用,不如使用麦克龙上门服务

最后,也许值得明确指出mcron替换 也atdatrun,作为我知道并搜索过的术语。由于某种原因,我不认为 cron 也应该能够近似我所寻找的内容。也许我会写一个补丁。

答案1

您必须mcron通过 posix 或 guile (方案)脚本使用,然后运行mcron &。或者安装croncrond或者crontab以 root 身份安装。

脚本位于 ~/.config/cron.

Posix 脚本应该具有.vixie.vix扩展名。

Guile 脚本应该有.guile.gle扩展名。

GNU 文档:mcron

相关内容