
私は 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
- 最後にジョブを開始します。
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 アプローチがとても気に入っています。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
今は動作しているようです。