crontab 작업과 동일한 crontab 줄에 주석이 허용되지 않는 이유는 무엇입니까?

crontab 작업과 동일한 crontab 줄에 주석이 허용되지 않는 이유는 무엇입니까?

이것은 제가 영어를 모국어로 사용하는 사람이 아니기 때문에 달라질 수 있지만,크론탭.5매뉴얼 페이지 자체가 모순됩니다.

빈 줄, 선행 공백 및 탭은 무시됩니다. 공백이 아닌 첫 번째 문자가 파운드 기호(#)인 줄은 주석이므로 무시됩니다. 주석은 명령의 일부로 간주되므로 cron 명령과 같은 줄에는 허용되지 않습니다. 마찬가지로 환경변수 설정과 같은 줄에 주석을 달 수 없습니다.

예를 들어, crontab 라인

00 20 * * *  sh test.sh  # frobnicate the sales data

이것은 작동하는 것 같습니다. 그렇다면 문제는 무엇입니까?

이 주석은 cron 자체에서 구문 분석 및 해석되지 않는다는 것이 분명합니다. 이는 마지막 명령 필드의 일부로 처리되어 쉘로 전달됩니다. 쉘은 이를 아무런 문제 없이 주석으로 처리합니다.

그렇다면 문제는 무엇입니까?

아니면 crontab 매뉴얼 페이지가 잘 표현되지 않은 것일까요?

답변1

Marcus의 답변에서 알 수 있듯이 귀하의 질문은 이미 여기에 답변되어 있습니다.

이 주석은 cron 자체에서 구문 분석 및 해석되지 않는다는 것이 분명합니다. 이는 마지막 명령 필드의 일부로 처리되어 쉘로 전달됩니다. 쉘은 이를 아무런 문제 없이 주석으로 처리합니다.

그러나 이를 실제 환경에 적용하려면 다음을 고려하십시오.

SHELL=/bin/sh
* * * * * foo.sh bar#bar

/bin/shPOSIX와 같은 sh를 주석 표시 로 사용해서는 안 되는 인수를 사용하고 -c실행하십시오 . 그러나 인수를 사용하여 실행하십시오 . Cron은 "리뷰"에 관심이 없습니다.foo.sh bar#bar#foo.shbar#bar

* * * * * foo.sh "foo #bar"

이전과 비슷합니다.

SHELL=/bin/echo
* * * * * foo bar # asdf

이는 echo매개변수 -c및 를 사용하여 실행됩니다 foo bar # asdf. echo문자열을 올바르게 인쇄합니다. Cron은 "리뷰"에 관심이 없습니다.

더 간단한 경우에는,

00 20 * * *  sh test.sh  # frobnicate the sales data

cron은 인수를 취하고 쉘을 실행하며 -cPOSIX sh test.sh # frobnicate the sales data와 유사한 쉘은 이를 주석으로 처리하고 실행하기 전에 제거해야 합니다 sh test.sh. cron은 "shell"이 명령줄에서 수행하는 작업에 실제로 신경 쓰지 않습니다.

매뉴얼 페이지에 "주석은 허용되지 않음"이라고 적혀 있다고 해서 거기에 해시 기호를 넣는 것이 금지된다는 의미는 아니며 단지 cron에서 주석으로 처리되지 않는다는 것입니다. 여기서 "허용"은 "가능하게 하다"를 의미합니다(예:7을 뜻하는 위키낱말사전).

답변2

언급했듯이 Cron 관점에서는 주석으로 간주되지 않습니다.

이것은 질문에 대답합니다.

이 줄에는 Cron 주석이 있을 수 없습니다. 줄의 나머지 부분 전체가 셸에서 실행되는 명령으로 복사됩니다. Cron에 의해 호출된 셸이 이 문자열을 처리하는 방법은 전적으로 셸의 책임이며 기호 #는 선택한 셸에서 주석으로 해석되지 않을 수 있습니다.

매뉴얼 페이지에는 이 문제에 대한 정확한 정보가 제공되므로 명확하게 설명되어 있습니다. 실제로 거기에 댓글을 달면 결과도 설명됩니다.

"에 관해서는》, 구체적인 답변은 없으며, 이렇게 정의됩니다.

관련 정보