ユーザーのcrontabはどこに保存されますか?


249

アップグレードしてから、ユーザーのcrontabは削除されました。これは今年これが起こったのは初めてではなく、毎回それを回復するのは苦痛です。

ユーザーのcrontabをバックアップできるようにしたいのですが、そのためにはどこに保存されているかを知る必要があります。


4
誰かがそれが一掃された理由を与えることができればいいと思います
ウォルター・トロス

1
@WalterTrossええ、それは非常に迷惑です。それはcronパッケージを更新することの副作用だと思いますが、私は同意します-それは起こるべきことではありません。
オリ

ええと、cronパッケージのアップグレードごとにユーザーcronが消去されることはありません!
pl1nk

@ pl1nk何が消えたのかわかりませんが、それは起こり続けます。マシンのゴースト、私は推測する。
オリ

ユーザーテーブルは一時領域/ var / spool / cron / crontabs / $ USERに保存されます。これは、次回の起動またはアップグレード時に削除される可能性があるためです。
fcm

回答:


325

実際、これらのファイルを手作業で処理することはお勧めできません。crontabmanページごと:

各ユーザーは独自のcrontabを持つこと
ができますが/var/spool/cron/crontabs、これらはのファイルですが、
直接編集することを意図したものではありません。

下のファイル/var/spoolは一時的/作業中と見なされます。そのため、おそらくアップグレード中に削除されますが、cronパッケージのアップグレードスクリプトを詳しく見ると、この点が明らかになります。

とにかく、cronエントリをバックアップするか、ホームディレクトリのファイルに保存することをお勧めします。

crontab -ecrontabファイルをその場で作成するために使用していると思います。その場合、を実行してcrontabファイルの「コピー」を取得できますcrontab -l。それをファイルにパイプして「バックアップ」を取得します。

crontab -l > my-crontab

次に、そのmy-crontabファイルを編集してエントリを追加または変更し、それをcrontabに渡すことで「インストール」できます。

crontab my-crontab

これは、と同じ構文チェックを行いcrontab -eます。


7
crontab -l/var/spool/cron/crontabs/$USER主にそのファイルに対する奇妙な許可のために通過するよりも簡単です。
オリ

1
iptables-savecronのの。ニース...
パルティアショット

4
おそらく、自動的にバックアップするためにcrontabを配置する必要があります> :)?
PascalVKooten

4
/var/spool/cron/crontabs複数のユーザーからのcrontabをキュレートしたり調べたりしたい場合は、突破するのが便利です。
ダースナン

1
あなたが精通していないサーバー上の謎を調査すると、それは共通ですsudo grep -rHin "$string" /etc/cron*(文字列がコマンドであるかもしれない場所のようなdockerlftpiptables、などまた、ユーザーのcrontabファイルを確認することをお勧めしますつまり、このQ&Aに私を導くものだ。。sudo grep -rHin "$string" /etc/cron* /var/spool/cron*
ブルーノブロノスキー


30

crontabとPostfixのインストールがブート後に壊れ続ける理由をようやく発見しました。それは本当に愚かな理由ですが...

RAMドライブ/var/spoolとしてマウントしていましたtmpfs

ばかげているように聞こえますが、古いSSDの調整方法の1つに従って、SSDの寿命を延ばしました。そうすることで、私は盲目的に取り付けられた/tmp/var/tmp/var/spoolのようにtmpfs影響のことを考えずに。またはの/var/spoolようなもので、セッションの期間中にのみ有用だと思いました。私は明らかに間違っていました。/proc//run/


8
/tmptmpfsとしてマウントしても安全ですが、/var/tmporではありません/var/spool/tmp再起動時に失われる可能性のある一時ストレージに使用されます。 /var/tmp再起動後に残る一時ストレージに使用されます。そして、あなたが発見したように、/var/spoolデータを処理するためのものであり、再起動後もデータは残ります。
thomasrutter 14年


2
また、書き込み回数は、現在のSSDでは問題にならないことに注意してください。
thomasrutter 14年

17

システム内のすべてのユーザーからのすべてのcronジョブをリストするには:

for user in $(cut -f1 -d: /etc/passwd)
do
  echo $user
  crontab -u $user -l
done

あなたの問題に代わる方法は、それらをcron.dフォルダーに置き、例のようにcronごとに適切なユーザーを指定することです:

00 01 * * * user /home/user/user-script.sh

別のドライブからcrontabを復元する場合crontab -u、現在のシステムから実行されているため、これは機能しません。
JVE999 14年

私はそれが80文字未満に収まり、多少読みやすいという点でワンライナーであると思いますが、私は一般的に、人がコピーペーストまたはスクリプトに入れることができるような形式でコードを置くのが好きです(そして、スクリプトでは、これは1行のコードではありません)。編集を提案しています...
パルティアショット

また、while read userユーザー名にスペースが含まれる場合を処理するために、ループに変換しようとしていましたが、明らかにそれは問題ではありません。ユーザー名文字の非常に限られたセット。
パルティアショット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.