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

how to delete entry from root cron which is already existing not created through chef cron resource

提问人:Hema 提问时间:8/31/2023 最后编辑:Wiktor StribiżewHema 更新时间:9/1/2023 访问量:47

问:

我的参赛作品 :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

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

我想使用 chef 单独删除以下行。

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

我收到如下错误,特别是它必须删除从 22:00 开始的 t,只是因为我们在 04:00 创建相同的开始。我不想删除在 04:00 运行的 ./opt/snow/snowagencron

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

评论


答:

0赞 Ismael Abreu 9/1/2023 #1

看起来你没有,可能是你错过了导入它。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 上找到有关此内容的更多信息

0赞 seshadri_c 9/1/2023 #2

您尝试使用的资源来自 line 说明书。很可能您没有在说明书的元数据中添加说明书的依赖关系。delete_lines

您需要:

  1. 请确保此说明书在您的 Chef 服务器上可用,如果您在本地模式下运行 Chef,则在本地可用。获取此食谱的说明可在上面链接的页面中找到。

  2. 在说明书的元数据中添加此说明书的依赖项。在说明书目录中,编辑文件并添加以下条目:metadata.rb

    depends 'line'
    

在我的测试中,我能够使用以下代码删除该行:

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