좋아, 이제 여러 가지 작업을 시도하고 있는데, 한 단계에서 다음 단계로 이동하기 전에 체계적으로 테스트하지 않은 것 같습니다.
먼저 우리가 코드를 정리하는거야 :
def read_file(file_name)
file = File.open(file_name, "r")
data = file.read
file.close
return data
end
puts "Start"
puts read_file("/tmp/log/test.log")
puts "End"
를 교체 할 수 있습니다 :
puts "Start"
puts File.read("./test.log")
puts "End"
그것은 평범하고 간단합니다; 방법이나 복잡한 것에 대한 필요성은 아직 없습니다.
테스트하기 쉽도록 현재 디렉토리의 파일을 사용하고 있습니다. 나는 간단하게 할 수 있습니다 거기에 일부 콘텐츠 넣어 :
echo "foo" > ./test.log
테스트 코드를 실행하면 ... 저를 제공
Greg:Desktop greg$ ruby test.rb
Start
foo
End
그래서 코드가 읽고 인쇄 제대로 알고.
이제 우리는 우리의 광기를 처리하기 전에,은 crontab에 갈 것입니다 무엇을 테스트 할 수 있습니다
Greg:Desktop greg$ ruby test.rb > ./test.log
Greg:Desktop greg$
음을. 출력 없음. 뭔가가 망가졌습니다. 이전에 파일에 내용이 있음을 알았습니까?
Greg:Desktop greg$ cat ./test.log
Start
End
파일을 Cat'ing 것은 '시작'과 코드의 "끝"출력하지만, 읽은해야하며, 출력이 이제 누락 된 부분이 보여줍니다.
셸이 제어를 통과하기 직전에 "test.log"를 잘라내어 코드를 열고 실행했는데, 이제 빈 파일을 열어 인쇄했습니다. 다른 말로하면, 쉘을 읽으기 직전에 쉘이 그것을 자르도록 요청하는 것입니다.
수정 내용은 내용을보고 무언가를하려고 할 때 쓸 파일과 다른 파일에서 읽는 것입니다. 루비가 내용을 가지고 뭔가를하려고하지 않는다면 루비와 함께 다른 파일에 글을 쓸 필요가 없습니다. 우리는 루비가 관련되어있는 것을 위해 cp
및/또는 mv
을 사용합니다. 그래서 우리는 내용으로 뭔가 할 거라면이 더 의미 : 나는 echo "foo" > ./test.log
를 사용하여 파일의 내용을 다시 설정합니다
ruby test.rb > ./test.log.out
을하고 'foo는'보여 cat'ing, 그래서 준비 해요 리디렉션 테스트를 다시 시도하십시오.
Greg:Desktop greg$ ruby test.rb > ./test.log.out
Greg:Desktop greg$ cat test.log.out
Start
foo
End
그 시간이 걸렸습니다. 다시 시도해도 동일한 결과가 나오므로 여기에 결과를 표시하지 않겠습니다.
파일을 전자 메일로 보내려면이 시점에서 코드를 추가하면됩니다. 변수에 할당으로 puts File.read('./test.log')
줄에 puts
교체 파일의 내용을 저장합니다 :
contents = File.read('./test.log')
그런 다음 당신이 이메일의 본문으로
contents
를 사용할 수 있습니다. (그리고이 모든 것을 위해 Ruby를 사용하기보다는 아마도
mail
또는
mailx
을 사용하거나 명령 행과 쉘을 사용하여 sendmail에 직접 파이프 할 것입니다.)
이 시점에서 명령 줄에 사용 된 명령과 동일한 명령을 사용하여 crontab에 명령을 추가하는 것이 좋습니다. 실행중인 cron이기 때문에 이전에했던 것처럼 STDERR을 캡처하기 위해 2>&1
리디렉션을 추가 할 수 있습니다. 아니요 같은 파일에 쓰거나 읽을 빈 파일이 있어야한다는 것을 기억하십시오.
앱을 작동시키기에 충분합니다.
내가 말을 싫어하지만,이 전체 응용 프로그램 문제 많은 일들이 있습니다. 당신이하고 싶은 말을 바꿀 수 있습니까? 열린 파일을 읽는 것이 당신이하는 일이 아니며 많은 의미를 지니지 않으므로주의 깊게 목표를 설명하면 아마도 거기에 도달하는 데 필요한 단계를 이해하는 데 도움이 될 것입니다. –
내 목표는 스크립트 (출력 및 발생하는 모든 오류)를 기록하는 것이며 스크립트가 끝날 때 이메일로이 로그를 보내주기를 바랍니다. – Carmen