10个版本 (3个稳定版)
使用旧的Rust 2015
1.0.2 | 2016年6月8日 |
---|---|
1.0.1 | 2016年4月21日 |
1.0.0-rc7 | 2016年3月28日 |
1.0.0-rc6 | 2016年1月4日 |
1.0.0-rc5 | 2015年12月28日 |
#458 in Unix API
每月 28 次下载
52KB
961 行
systemd-cron-next
这是什么?
这是一个cron-to-systemd定时器框架的兼容层。它通过解析来自通常位置(如/etc/crontab
和/var/spool/cron
)的crontab和anacrontab文件,生成systemd定时器和服务。您可以使用cron.target
作为生成单元的单个控制点。
它旨在作为所有cron实现的直接替代品。
理由
systemd的crontab生成器(用C实现)已在邮件列表中发布,但后来被Lennart拒绝
我不太相信这是一个真正的好主意。至少从我的角度来看,我们最好只转换crontab,这样就足够了。与sysv init脚本不同,crontab的使用数量(至少在Fedora上)相对较小,在第三方包中非常罕见。
Lennart
虽然我一般同意他的观点,但我并不完全确信总是方便地将大量的*.timer
和*.service
文件放在一起。我发现将所有任务调度在单个文件中更方便,如果你一次能看到多个任务,那么任务调度的关系也更明显。
综合考虑,我认为人们应该有一个替代方案,所以我决定支持systemd crontab生成器的想法。尽管邮件列表中原始的crontab解析器C实现非常不完整:它不支持单调调度(如@daily
或@yearly
),它无法解析注释和环境变量设置等。
因此,我决定创建systemd-crontab-generator。
历史
我在C语言方面并不擅长,因此C语言的实现(尽管它对于生成器来说是推荐的)将花费我很多时间,所以最初,我使用Python进行概念验证实现。然后我的小型家庭项目被@systemd-cron项目注意到,最终被合并到其中,并得益于Alexandre Detiste、Dwayne Bent和其他人的帮助而发展起来。
然而,我心中仍然想着项目的未来:用系统语言重写它。Python作为基于虚拟机的脚本语言,并不是系统服务的最佳选择:它运行缓慢(实际上是运行速度最慢的系统生成器),存在多线程问题,需要许多像setgid/setuid C助手这样的黑客手段来实现crontab,等等。
与此同时,我非常喜欢从开始就使用的Rust系统语言,它已经达到了1.0版本,所以我决定抓住这个机会,将所有内容都用Rust重写。
你现在看到的当前版本是@systemd-cron的继任者。该项目完全用Rust从头开始重写,同时保留了经验,systemd单元模板以及由@systemd-cron团队在Python版本中精心打磨的主要算法和解决方案。
使用方法
生成器在系统启动时以及crontab更改时运行。
项目包括简单的crontab
命令等效物,其行为类似于标准crontab命令(并接受相同的选项)。
安装后,将可执行脚本添加到适当的cron目录中(例如/etc/cron.daily
),并启用systemd-cron。
# systemctl daemon-reload
# systemctl enable cron.target
# systemctl start cron.target
现在这些脚本应该由systemd自动运行。有关更多信息,请参阅man:systemd.cron(7)。
要进一步控制cron作业,请使用cron.target
单元。
依赖关系
- systemd ≥ 197
- systemd ≥ 209,年度定时器
- systemd ≥ 212,持久定时器
- systemd ≥ 217,分钟、季度和半年定时器
- systemd ≥ 229,支持使用
RandomizedDelaySec
选项的真正随机延迟
- run-parts
- /usr/sbin/sendmail(可选,在运行时评估)
安装
如果您使用的是Archlinux,可以从AUR安装,否则请参阅PKGBUILD
文件,并从package()
子目录执行命令。
打包
构建
$ ./configure
$ make
您需要Rust稳定编译器(已使用1.5.0进行测试)和cargo工具来构建项目。
暂存
$ make DESTDIR="$destdir" install
配置
configure
脚本接受命令行参数来配置构建的各种细节。以下选项遵循标准GNU 安装目录
--prefix=<路径>
--bindir=<路径>
--confdir=<路径>
--datadir=<路径>
--libdir=<路径>
--statedir=<路径>
--mandir=<路径>
--docdir=<路径>
其他选项包括
--unitdir=<path>
系统单元文件的路径。默认值:<libdir>/systemd/system
。--runpaths=<path>
指定run-parts
可执行文件应使用的路径。默认:<prefix>/bin/run-parts
。--enable-boot[=yes|no]
包含对启动定时器的支持。默认:yes
。--enable-minutely[=yes|no]
包含对分钟定时器的支持。需要 systemd ≥ 217。默认:no
。--enable-hourly[=yes|no]
包含对小时定时器的支持。默认:yes
。--enable-daily[=yes|no]
包含对每天定时器的支持。默认:yes
。--enable-weekly[=yes|no]
包含对每周定时器的支持。默认:yes
。--enable-monthly[=yes|no]
包含对每月定时器的支持。默认:yes
。--enable-quarterly[=yes|no]
包含对每季度定时器的支持。需要 systemd ≥ 217。默认:no
。--enable-semi_annually[=yes|no]
包含对半年定时器的支持。需要 systemd ≥ 217。默认:no
。--enable-yearly[=yes|no]
包含对每年定时器的支持。需要 systemd ≥ 209。默认:no
。--enable-persistent[=yes|no]
使定时器持久化。需要 systemd ≥ 212。默认:no
。--enable-randomized-delay=[yes|no]
为RANDOM_DELAY
支持使用RandomizedDelaySec
选项。需要 systemd ≥ 229。默认:yes
。
最新 systemd 的典型配置为
$ ./configure --prefix=/usr --confdir=/etc --enable-yearly --enable-persistent
如果您只需要生成器(您需要提供自己的 /etc/crontab
以驱动 /etc/cron.daily/ 等...)
$ ./configure --enable-boot=no --enable-hourly=no --enable-daily=no --enable-weekly=no --enable-month=no --enable-persistent --prefix=/usr --confdir=/etc
注意事项
您的软件包在启动 cron.target 之前还应运行这些额外命令,以确保 @reboot 脚本不会立即触发
# touch /run/crond.reboot
# touch /run/crond.bootdir
另请参阅
systemd.cron(7)
或在源代码树中 man -l src/man/systemd.cron.7
免责声明
这是一个测试版产品!使用风险自担!我对任何由于使用或误用此项目而导致的数据丢失、时间损失、金钱损失或其他故障不承担责任!我已经在我的本地服务器上运行了数月,没有问题,但这并不意味着您也不会有问题!不要因为产品的崩溃而责怪我!您已被警告!
许可
项目的主体部分根据 MIT 许可。Crontab 手册页是从 Vixie Cron 衍生而来,并使用 Paul-Vixie's-license 许可。
贡献
非常欢迎您提交错误和Pull Request!还可以查看AUR中关于Arch包状态的最新消息评论。
版权
原始 @systemd-cron 项目
- © 2013-2014 Dwayne Bent
- © 2013 Dominik Peteler
- © 2014 Daniel Schaal [email protected]
Systemd crontab生成器进化、工具和支持
- © 2014 Alexandre Detiste [email protected]
- © 2014 Dwayne Bent
原始systemd crontab生成器Python代码,Rust版本
- © 2014-2015 Konstantin Stepanov [email protected]
Systemd crontab生成器man页面(man/systemd-crontab-generator.8.in)
- © 2014 Alexandre Detiste [email protected]
Crontab man页面(man/crontab.5.in)
- © 1988, 1990, 1993, 1994, Paul Vixie [email protected]
- © 1994, Ian Jackson [email protected]
- © 1996-2005, Steve Greenland [email protected]
- © 2005-2006, 2008-2012, Javier Fernández-Sanguino Peña [email protected]
- © 2010-2011, 2014 Christian Kastner [email protected]
- 通过Debian BTS的多次贡献归其各自的作者所有
Debian打包
- © 2013 Shawn Landden [email protected]
- © 2014 Alexandre Detiste [email protected]
依赖关系
~6MB
~112K SLoC