我在 Arch Linux 上,我正在尝试做一个每分钟触发一次的 cron 工作。所以我使用:
$ crontab -e
Run Code Online (Sandbox Code Playgroud)
并将脚本添加到:
* * * * * Rscript /srv/shiny-system/cron/CPU.R
~
~
"/tmp/crontab.8VZ7vq" 1 line, 47 characters
Run Code Online (Sandbox Code Playgroud)
(我不知道“/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.
Run Code Online (Sandbox Code Playgroud)
这是什么意思?我应该把这个 crond.service 放在哪里,我应该放什么脚本?
Arch Linux 上没有crond.service。正如 Arch Wiki 所说的那样:
有许多 cron 实现,但默认情况下没有安装它们,因为基本系统使用 systemd/Timers 代替。
因此,如果您想使用 cron,您必须选择要安装的众多实现中的哪一个,然后启动该特定服务。
你不只是随机输入systemctl enable nonexistent.service
然后想知道为什么它没有运行......
如果你想要 cronie,那么你安装 cronie 并启动它:
pacman -Syu cronie
systemctl enable --now cronie.service
Run Code Online (Sandbox Code Playgroud)
Arch 文档通常非常清楚;如果您更仔细地阅读链接到的页面,您应该会找到您需要的内容。
如果我理解正确的话,你的意思是...
如何运行“cron”作业
...arch Linux 上的预定活动。使用 systemd/Timers 作为 cron 替代品非常简单。
尽管 cron 可以说是最著名的作业调度程序,但 systemd 计时器可以作为替代方案。
好处
使用计时器的主要好处来自于每个作业都有自己的 systemd 服务。其中一些好处是:
...正如这里提到的
如果您必须使用 cron,它仍然是可能的并在此处进行描述。
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 文件cheduledReboot.service包含:
[Unit]
Description=Scheduled Reboot
[Service]
Type=simple
ExecStart=/usr/bin/systemctl --force reboot
Run Code Online (Sandbox Code Playgroud)
2.2 文件cheduledReboot.timer包含:
[Unit]
Description=Reboot Scheduling.
[Timer]
OnCalendar=*-*-* 01:30:00
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
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 驱动器等,并且它工作得非常好且高效。