$ touch aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBBB
$ crontab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBBB
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: No such file or directory
이 동작은 이상해 보입니다(오류 메시지에서 경로가 어떻게 잘리는지 확인). 저는 데비안 불스아이 11을 사용하고 있습니다.
이것은 버그입니까, 아니면 crontab에 특별한 제한이 있는 특별한 이유가 있습니까?
여기 도커 이미지에서는 재현할 수 없습니다.https://hub.docker.com/r/willfarrell/crontab
답변1
Cygwin 버전은 crontab
설명 오류 메시지를 인쇄합니다.
file=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcd
touch "$file"
crontab "$file"
crontab: usage error: filename too long
echo "$file" | awk '{print length}'
108
이 메시지는 귀하의 우려사항을 해결하지만 어떠한 설명도 제공하지 않습니다.
불행하게도 데비안 버전은 이를 잘 설명하지 못합니다:
crontab "$file"
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU: No such file or directory
echo 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU' | awk '{print length}'
99
그러나 소스 코드( apt-get source crontab
)는 많은 단서를 제공합니다 cron.h
.
#define MAX_FNAME 100 /* max length of internally generated fn */
그런 다음 crontab.c
:
static char Filename[MAX_FNAME];
…
(void) strncpy (Filename, argv[optind], (sizeof Filename)-1);
Filename[(sizeof Filename)-1] = '\0';
이러한 조각으로 알 수 없는 경우 파일 이름 길이가 99자로 하드코딩된 제한이 있습니다. 자의적인 이유 외에는 다른 이유가 없다고 생각합니다."그 정도면 충분히 길어야지". 올바른 접근 방식은 아마도 다음을 사용하는 것입니다.PATH_MAX
+1
, 그러나 저자는 이것을하지 않았습니다. ㅏ논평코드는 아마도 1988년에(또는 1994년에) 작성되었을 것입니다. 그러나 상수가 공식화된 것은 POSIX 이전이었을 가능성이 높습니다.