Arch Linux - 如何运行 cron 作业?

lau*_*kok 7 cron arch-linux

我在 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 放在哪里,我应该放什么脚本?

jas*_*yan 8

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 文档通常非常清楚;如果您更仔细地阅读链接到的页面,您应该会找到您需要的内容。


Iva*_*vic 5

如果我理解正确的话,你的意思是...

如何运行“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 文件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)
  1. 最后开始工作:

sudo systemctl start scheduledReboot.timer

sudo systemctl enable scheduledReboot.timer

  1. 检查作业是否创建成功:

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 驱动器等,并且它工作得非常好且高效。