我想在将来的某个特定时间在 Guix 上运行一次 shell 命令。我的想法是使用该at
命令,但这似乎在 Guix 上不可用。
我的愿望的命令性在某种程度上违背了 Guix 的声明性哲学,我期望这是(间接)原因at
不可用。
例如,at
需要atrun
或atd
正在运行,这可能不太适合 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 Home Service更好
最后,也许值得明确指出mcron
替换 也atd
或atrun
,作为我知道并搜索过的术语。由于某种原因,我不认为 cron 也应该能够近似我所寻找的内容。也许我会写一个补丁。
您必须
mcron
通过 posix 或 guile (方案)脚本使用,然后运行mcron &
。或者安装cron
,crond
或者crontab
以 root 身份安装。脚本位于
~/.config/cron
.Posix 脚本应该具有
.vixie
或.vix
扩展名。Guile 脚本应该有
.guile
或.gle
扩展名。GNU 文档:mcron