100文字を超えるファイルパスが渡されると、crontabに「該当するファイルまたはディレクトリがありません」というエラーが発生します。

100文字を超えるファイルパスが渡されると、crontabに「該当するファイルまたはディレクトリがありません」というエラーが発生します。
$ touch aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBBB
$ crontab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBBB
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: No such file or directory

この動作は奇妙に見えます(エラーメッセージでパスがどのように切り取られるかを確認)。私はDebian Bullsey 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

このメッセージはあなたの懸念を解決しますが、いかなる説明も提供しません。

残念ながら、Debianバージョンはこれをうまく説明しません。

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以前であった可能性が高いです。

おすすめ記事