Arch Linux - 如何运行 cron 作业?

Arch Linux - 如何运行 cron 作业?

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

答案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

现在似乎正在发挥作用。

相关内容