質問: crontabに実行するシェルを設定した場合そのshの実行ユーザーは誰になるのでしょうか? 確認方法を教えていただきたいです。 パーミッション644で実行できる認識なのですが他のファイルは755や777になっているため、rootが実行した場合 下記のshの所有者が私の場合実行できないのでしょうか?実行する環境がなく困っています。 ``` 00 01 * * * /home/common/bin/test/export_01.sh > /dev/null 2>&1 ```
回答: 2つの物事を一度に解釈されようとしています。 まず crontab ですが `/etc/cron.d` (cron の実装により変わります) などを直接変更せずに ``` $ crontab -e ``` を実行されたのなら、それはそのコマンドを実行したユーザが実行ユーザになります。 > > パーミッション644で実行できる認識なのですが他のファイルは755や777になっているため、rootが実行した場合 > > 下記のshの所有者が私の場合実行できないのでしょうか?実行する環境がなく困っています。 > > > またこれはファイルのパーミッションの話です。実行権限はマスクのビットを確認します。例えば 640 であれば 6: 自信 4: 同じグループのユーザ 0: その他のユーザ となっており、かつその値は 4: 参照権限 2: 書き込み権限 1: 実行権限 の論理和の値となります。6 は 2(書き込み) と 4(参照) の論理和、つまり「自信は参照と書き込み」を許可し「同じグループのユーザは参照権限のみ」を許可し、他のユーザには何れも許可しないという権限設定を行ったファイルの事を意味します。つまり実行は許可されていません。実行されたいのであれば ``` $ chmod 755 /path/to/the/file ``` の様にマスク値を直接指定して実行するか ``` $ chmod +x /path/to/the/file ``` 実行権限だけ付与する様に実行します。その他のユーザに実行許可を付けるかはご自身で検討下さい。 質問の内容の、crontab を設定したユーザがそのファイルを実行できるかという話ですが 750 は同じグループであれば実行可能です。これは 5 が 1(実行) と 4(参照) の論理和だからです。 もしコマンドがファイルを出力する様な物なのであれば、出力ディレクトリもグループで書き込み許可を付けておくべきです。その場合、実行ユーザが所有者となりますのでご注意ください。