注: これを root として実行するか、または を使用sudo
すると、単一のユーザーのジョブだけでなく、システム上のすべての cron ジョブを取得する必要があります。自分自身またはそのユーザーとして実行すると、それらのジョブだけがキャプチャされる場合があります。私はその側面をテストしていません。
すべてのユーザーとパッケージの crontab ファイルをキャプチャするために実行しようとするcrontab -l
ことは、タスクを実行するための間接的な方法のように思われ、パスワード要求を処理してコードがハングアップするという手間がかかる可能性があります。プロンプトを台無しにするのではなく、それらを格納するディレクトリをくまなく調べるコードを作成します。を使用してコードを実行sudo
すると、ファイルへのアクセスに問題はありません。
http://www.linuxquestions.org/questions/linux-newbie-8/etc-crontab-vs-etc-cron-d-vs-var-spool-cron-crontabs-853881/での議論をご覧ください。実際の cron タブ ファイルがディスク上のどこに保存されているかについては、 を参照してください。
https://superuser.com/questions/389116/how-to-recover-crontab-jobs-from-filesystem/389137にも同様の情報があります。
Mac OS は、Apple が cron ファイルを置く場所が Linux とは少し異なります。man cron
いずれかの OS の決定的な詳細については、コマンドラインで実行してください。
ファイルをバックアップする方法について、少しテストしたコードを次に示します。それらをどのように復元するかはあなた次第ですが、理解するのは難しくありません。
require 'fileutils'
BACKUP_PATH = '/path/to/some/safe/storage/directory'
CRONTAB_DIRS = %w[
/usr/lib/cron/tabs
/var/spool/cron
/etc/anacrontab
/etc/cron.d
]
CRONTAB_FILES = %w[
/etc/cron_list
]
def dump_pre_cron_jobs(file_path)
full_backup_path = File.join(
BACKUP_PATH,
File.dirname(file_path)
)
FileUtils.mkdir_p(full_backup_path) unless Dir.exist?(full_backup_path)
File.write(
File.join(
full_backup_path,
file_path
),
File.read(file_path)
)
rescue Exception => e
STDERR.puts e.message
end
CRONTAB_DIRS.each do |ct|
next unless Dir.exist?(ct)
begin
Dir.entries(File.join(ct, '*')).each { |fn| dump_pre_cron_jobs(fn) }
rescue Errno::EACCES => e
STDERR.puts e.message
end
end
CRONTAB_FILES.each do |fn|
dump_pre_cron_jobs(fn)
end
ディレクトリとファイルにアクセスするには、ルート経由でこれを実行する必要がありsudo
ます。これらは通常、権限のない詮索好きな目からロックダウンされているためです。
BACKUP_PATH
このコードは、元のファイル パスに基づいて にcrontab のリポジトリを作成します。ファイルの内容は変更されないため、cp
このプロセスを元に戻すコードを使用してコピーするか、コードを記述して、そのまま復元できます。