요일의 패리티에 따라 파일 이름을 지정하고 싶습니다. 터미널에서는 다음이 작동합니다.$(($(date +\%u)%2))
그러나 이것은 cron에서는 작동하지 않습니다(수학 표현식의 평가가 작동하지 않는 것 같습니다).
cron에서 어떻게 작동하게 할 수 있나요?
답변1
다른 퍼센트 기호가 아닌 하나의 퍼센트 기호를 이스케이프했습니다.
$(($(date +\%u)%2))
^
HERE
모두crontab 항목의 백분율 기호는 %가 특별한 의미를 갖기 때문에 이스케이프 처리해야 합니다. crontab(5) 맨페이지 인용:
줄의 전체 명령 부분(개행 또는 % 문자까지)은 /bin/sh 또는 crontab 파일의 SHELL 변수에 지정된 쉘에 의해 실행됩니다. 백슬래시()로 이스케이프하지 않는 한 명령의 퍼센트 기호(%)는 개행 문자로 변경되고 첫 번째 % 이후의 모든 데이터는 표준 입력으로 명령에 전송됩니다.
물론 이 문단의 표현을 더 잘 썼을 수도 있습니다.
따라서 다음과 같아야 합니다.
$(($(date +\%u)\%2))
답변2
~에서crontab(5)
여러 환경 변수는 cron(8) 데몬에 의해 자동으로 설정됩니다. SHELL은 /bin/sh로 설정됩니다.
그리고 sh
그 멋진 수학에 대해서는 아무것도 모릅니다. 이는 두 가지 가능한 솔루션을 제안합니다. 먼저 또는 cron 파일을 단순하게 유지하기 위해 SHELL
다른 셸을 설정한 다음 필요한 날짜 수학 비즈니스 로직이 포함된 스크립트를 호출합니다. SHELL=/bin/bash
( %
또한 매우 특별합니다)crontab(5)
답변3
두 개의 cron 항목을 만듭니다.
하나는 패리티가 0인 날(crontab의 "요일" 필드 사용)에 실행되어 0이라는 이름의 파일에 씁니다. 다른 하나는 하나의 패리티가 있는 날에 실행되며 하나의 패리티 이름을 딴 파일에 씁니다.