我想在将来的某个特定时间在 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
替换 也atd
或atrun
,作为我知道并搜索过的术语。由于某种原因,我不认为 cron 也应该能够近似我所寻找的内容。也许我会写一个补丁。
答案1
您必须mcron
通过 posix 或 guile (方案)脚本使用,然后运行mcron &
。或者安装cron
,crond
或者crontab
以 root 身份安装。
脚本位于 ~/.config/cron
.
Posix 脚本应该具有.vixie
或.vix
扩展名。
Guile 脚本应该有.guile
或.gle
扩展名。