我在 Arch Linux 上,正在尝试创建一个每分钟触发一次的 cron 作业。所以我用:
$ crontab -e
并将脚本添加到:
* * * * * Rscript /srv/shiny-system/cron/CPU.R
~
~
"/tmp/crontab.8VZ7vq" 1 line, 47 characters
(我不知道“/tmp/crontab.8VZ7vq”是什么!)
但它不起作用 - CPU.R 并不是每分钟都运行。那么在 Arch Linux 中我应该怎么做才能运行 cron 作业呢?我已经查看了下面的这些维基指南,但我仍然迷失了:
编辑
我发现了一些提示这里关于crond
。
[xxx@localhost ~]$ systemctl status crond
● crond.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
[xxx@localhost ~]$ sudo systemctl start crond
[sudo] password for xxx:
Failed to start crond.service: Unit crond.service failed to load: No such file or directory.
这是什么意思?在哪里我应该把这个 crond.service 和什么我应该把脚本放进去吗?
答案1
没有crond 服务在 Arch Linux 上。 Arch Wiki 说得非常清楚:
有许多 cron 实现,但默认情况下没有安装它们,因为基本系统使用 systemd/Timers 代替。
因此,如果你想使用 cron,你必须选择您将安装众多实现中的哪一个,然后启动该特定服务。
您不会只是随机键入systemctl enable nonexistent.service
然后想知道为什么它没有运行......
如果你想要 cronie,那么你可以安装 cronie 并启动它:
pacman -Syu cronie
systemctl enable --now cronie.service
Arch 文档总体上非常清晰;如果您更仔细地阅读链接到的页面,您应该找到您需要的内容。
答案2
如果我理解正确的话,你的意思是...
如何运行“cron”作业
...arch Linux 上的预定活动。使用 systemd/Timers 作为 cron 替代品非常简单。
尽管 cron 可以说是最著名的作业调度程序,但 systemd 计时器可以作为替代方案。
好处
使用计时器的主要好处来自于每个作业都有自己的 systemd 服务。其中一些好处是:
- 作业可以独立于其计时器轻松启动。这简化了调试。
- 每个作业都可以配置为在特定环境中运行(请参阅 systemd.exec(5))。
- 作业可以附加到 cgroup。
- 可以将作业设置为依赖于其他 systemd 单元。
- 作业记录在 systemd 日志中以便于调试。
...如上所述这里
如果您必须使用 cron,它仍然是可能的并进行了描述这里。
为了使这个答案变得有用,我们举一个最小的例子每日自动计划重启01:30。
1. 创建两个文件,一个服务文件和一个定时器文件。两个名称(.timer 和 .service)必须匹配。铁:
sudo vim /usr/lib/systemd/system/scheduledReboot.service
sudo vim /usr/lib/systemd/system/scheduledReboot.timer
(文件夹 /usr/lib/systemd/system/... 是包含所有 .service 文件的默认文件夹,仅供参考)
2.1 文件 ScheduledReboot.service 包含:
[Unit]
Description=Scheduled Reboot
[Service]
Type=simple
ExecStart=/usr/bin/systemctl --force reboot
2.2 文件 ScheduledReboot.timer 包含:
[Unit]
Description=Reboot Scheduling.
[Timer]
OnCalendar=*-*-* 01:30:00
[Install]
WantedBy=multi-user.target
- 最后开始工作:
sudo systemctl start scheduledReboot.timer
sudo systemctl enable scheduledReboot.timer
- 检查作业是否创建成功:
sudo systemctl list-timers --all
和/或
sudo systemctl status scheduledReboot.timer
..显示如下内容:
Trigger: Sun 2020-05-31 01:30:00 EDT; 10h left
我个人非常喜欢 systemd / .service 方法,因为我将所有系统作业都与 systemctl 一起使用,例如自动安装我的 nfs 驱动器等,并且它工作得非常好且高效。
答案3
e
与您一起创建一个文件 crone 任务等 cron.txt
cat cron.txt 0 1 * * * systemctl 停止 iradio; shutdown -P 0 30 23 * * * systemctl 停止时钟 34 23 * * * systemctl 启动时钟
然后 crontab 新文件
crontab cron.txt
现在似乎正在发挥作用。