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

現在似乎正在發揮作用。

相關內容