ruby 如何从根cron中删除已经存在而不是通过chef cron资源创建的条目

wecizke3  于 12个月前  发布在  Ruby
关注(0)|答案(2)|浏览(103)

我的cron条目:

[root@server1 ~]# cat /var/spool/cron/root
0 21 * * * /bin/bash -c "sleep $[RANDOM \% 60 + 1]m"; nice -n 10 /opt/snow/snowagent -w /opt/snow/ >/dev/null 2>&1
# Chef Name: account_lister_clean
0 12,23 * * * rm -f /opt/scripts/acct_list_run_once
# Chef Name: logger_cron
0 0 * * * /opt/unx_logger.sh

========================================
我想删除下面的一行单独使用厨师。

0 21 * * * /bin/bash -c "sleep $[RANDOM \% 60 + 1]m"; nice -n 10 /opt/snow/snowagent -w /opt/snow/ >/dev/null 2>&1

=========================================

delete_lines 'remove snow agent cron at 22:00' do
        path '/var/spool/cron/root'
        pattern '^*/opt/snow/snowagent'
end

我得到的错误如下所示,这将是什么样的模式,特别是它必须删除/opt/snow/snowagen t,它开始于22:00,因为我们正在创建相同的cron开始于04:00。我不想删除在04:00运行。

NoMethodError
-------------
undefined method `delete_lines' for cookbook: test_lnx_slm9upgrade, recipe: install_slm9 :Chef::Recipe
m3eecexj

m3eecexj1#

看起来你没有delete_lines,可能是你错过了导入它。
同时我给你找到了一个简单的解决办法

ruby_block 'remove snow agent' do
  block do
    rc = Chef::Util::FileEdit.new('/etc/hosts')
    rc.search_file_delete_line(/\/opt\/snow\/snowagent/, '')
    rc.write_file
  end
end

您可以在https://rubydoc.info/gems/chef/Chef/Util/FileEdit#search_file_delete_line-instance_method上找到有关此的更多信息

41zrol4v

41zrol4v2#

您尝试使用的delete_lines资源来自line cookbook。很可能你还没有在你的食谱的元数据中添加对食谱的依赖。
您需要:
1.确保此食谱在您的Chef服务器上可用,或者如果您在本地模式下运行Chef,则在本地可用。获得这本食谱的说明可在上面链接的页面中找到。
1.在您的烹饪书的元数据中添加此烹饪书的依赖项。在您的cookbook目录中编辑metadata.rb文件并添加以下条目:

depends 'line'

在我的测试中,我能够删除下面的代码行:

delete_lines 'remove snow agent cron at 22:00' do
  path '/var/spool/cron/root'
  pattern '^.*/opt/snow/snowagent'
end

相关问题