실행 된 명령이 아무것도 반환하지 않을 때 sshkit 캡처가 오류가 발생하지 않을 수 있습니까?

더글러스 읽기

내가 달성하려는 것은 모든 서버에서 로그 파일 grep을 수행하는 capistrano3 작업입니다. 서버가 많기 때문에 많은 시간을 절약 할 수 있으므로 수동으로 또는 스크립트로 작성하지만 순차적으로 시간이 걸립니다.

서버 중 하나가 grep에 대해 아무것도 반환하지 않는 경우를 제외하고는 실제로 작동하는 가장자리 작업을 거칠게 처리했습니다. 이 경우 전체 명령이 넘어갑니다.

따라서 capture빈 반품을 수락 하도록 설정하는 방법이 있는지 궁금 합니다.

namespace :admin do
  task :log_grep, :command, :file do |t,args|
    command = args[:command] || 'ask for a command'
    file = args[:file] || 'log_grep_results'
    outs = {}
    on roles(:app), in: :parallel do
      outs[host.hostname] = capture(:zgrep, "#{command}")
    end

    File.open(file, 'w') do |fh|
      outs.each do |host,out|
        fh.write(out)
      end
    end
  end
end
Ondřej Želazko

다른 사람이이 질문에 올 경우 여기에 해결책이 있습니다. raise_on_non_zero_exit: false

나는 원했다 :

resp = capture %([ -f /var/run/xxx/xxx.pid ] && echo "ok")

오류:

SSHKit::Command::Failed: [ -f /var/run/xxx/xxx.pid ] && echo "ok" exit status: 1
[ -f /var/run/xxx/xxx.pid ] && echo "ok" stdout: Nothing written
[ -f /var/run/xxx/xxx.pid ] && echo "ok" stderr: Nothing written

해결책:

resp = capture %([ -f /var/run/xxx/xxx.pid ] && echo "ok"), raise_on_non_zero_exit: false
# resp => ""

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관