Chef cron リソースを通じて作成されていない、すでに存在する root cron からエントリを削除する方法
概要
私の 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
以下のようなエラーが発生しました。特に、04:00 に開始する同じ cron を作成しているため、22:00 に開始する /opt/snow/snowagent を削除する必要があるパターンは何でしょうか。 04:00に実行されるものは削除したくありません。
NoMethodError
-------------
undefined method `delete_lines' for cookbook: test_lnx_slm9upgrade, recipe: install_slm9 :Chef::Recipe
解決策
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 を参照してください。