我想要一个ruby脚本,它会使用"crontab -l"
或其他任何可以实现相同目标的文件将所有现有的cron作业转储到文本文件中。此外,文本文件应该可以与crontab txtfile
一起使用以再次创建cron作业。
以下是我已编写的代码:
def dump_pre_cron_jobs(file_path)
begin
cron_list = %x[crontab -l]
if(cron_list.size > 0)
cron_list.each do |crl|
mymethod_that_writes_tofile(file_path, crl) unless crl.chomp.include?("myfilter")
end
end
rescue Exception => e
raise(e.message)
end
end
答案 0 :(得分:1)
为什么这需要是一个Ruby脚本?
正如您所说,您可以将crontab转储到包含crontab -l > crontab.txt
的文件。
要再次阅读它们,只需使用crontab crontab.txt
或cat crontab.txt | crontab -
答案 1 :(得分:0)
我同意@Vortura您不需要创建Ruby脚本来执行此操作。
如果你真的想,这可能是:
File.open('crontab.txt', 'w') do |crontab|
crontab << `crontab -l`
end
答案 2 :(得分:0)
注意:以root用户身份运行,或使用sudo
应该捕获系统上的所有cron作业,而不仅仅是单个用户的作业。以您自己或该用户身份运行它,它可能只捕获那些作业。我没有测试它的那个方面。
尝试运行crontab -l
来捕获所有用户和包的crontab文件似乎是执行任务的间接方式,并且可能有处理挂起代码的密码请求的麻烦。我会编写代码来梳理存储它们的目录,而不是弄乱提示。使用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与cron文件所在的Linux有所不同。在命令行运行man cron
以获取有关任一操作系统的确切详细信息。
这是一个经过精心测试的代码,用于说明我如何备份文件。如何恢复它们是为了让你弄明白,但不难发现:
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
以root身份运行它来访问目录和文件,因为它们通常被锁定在未经授权的窥探之下。
代码根据原始文件路径在BACKUP_PATH
中创建一个crontabs存储库。没有对文件内容进行任何更改,因此可以通过cp
复制它们或编写代码来反转此过程来原样恢复它们。