Arch Linux - cron ジョブを実行するにはどうすればいいですか?

Arch Linux - cron ジョブを実行するにはどうすればいいですか?

私は Arch Linux を使っていて、1 分ごとに実行される 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 ジョブを実行するにはどうすればいいでしょうか? 以下の wiki ガイドを調べましたが、まだわかりません。

編集

私はいくつかのヒントを見つけましたここに関して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 でイベントをスケジュールします。これは、cron の代わりに systemd/Timers を使用すると非常に簡単です。

cron はおそらく最もよく知られているジョブ スケジューラですが、systemd タイマーも代替手段となります。

利点

タイマーを使用する主な利点は、各ジョブが独自の systemd サービスを持つことにあります。これらの利点のいくつかは次のとおりです。

  • ジョブはタイマーとは独立して簡単に開始できます。これによりデバッグが簡単になります。
  • 各ジョブは特定の環境で実行するように設定できます(systemd.exec(5)を参照)。
  • ジョブは cgroup にアタッチできます。
  • ジョブは他の systemd ユニットに依存するように設定できます。
  • ジョブは systemd ジャーナルに記録され、簡単にデバッグできます。

...述べたようにここ

cronを使用する必要がある場合でもそれは可能であり、説明されているここ。


この回答を有用なものにするために、毎日自動で再起動をスケジュール午前1時30分。

1. サービス ファイル 1 つとタイマー ファイル 1 つの 2 つのファイルを作成します。両方の名前(.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 アプローチがとても気に入っています。NFS ドライブの自動マウントなど、すべてのシステムジョブを systemctl で使用しており、非常にうまく効率的に機能するからです。

答え3

e

crone タスクなどを含むファイルを作成します。cron.txt

cat cron.txt 0 1 * * * systemctl stop iradio; シャットダウン -P 0 30 23 * * * systemctl stop clock 34 23 * * * systemctl start clock

新しいファイルをcrontabで保存する

crontab cron.txt

今は動作しているようです。

関連情報