問題は、ユーザーがファイルを実行する権限を持っていない可能性があります。
まず、スクリプトの実行フラグを設定します
chmod +x /home/samitha/bash.sh
次に、php ファイルのパーミッションを確認する必要があります
ls -lah /var/www/Controller
ユーザーグループもユーザー名も表示されない場合は、スクリプトをスーパーユーザー権限で実行するか、権限を変更する必要があります。
最初の方法はあなたのエントリを入れることです
sudo crontab -e
または 2 番目の方法 (これはお勧めしません。サイトを呼び出してスクリプトを実行できるためです)
chmod a+x /var/www/Controller/post.php
TL;DR:crontab およびスクリプトによって呼び出されるすべてのスクリプトで、スクリプトの前に「bash」を挿入してください。
これには修正があります。以前の答えはどれもうまくいきませんでした。 Kubuntu (カーネル v5.8 に更新) を実行している 2 台の Asus ラップトップを、実質的に同一の構成で使用しています。なぜ一方に問題があり、もう一方に問題がないのかわかりません。しかし、2日間の実験の後、私は修正を見つけました.願わくば、私よりも知識のある誰かが原因を見つけられることを願っています.
Cron は bash の代わりに sh を使用しています。 SHELL=/bin/bash を追加して、crontab のコマンドの上に PATH を定義しようとしましたが、効果はありませんでした。私のスクリプトはすべて、先頭に #!/bin/bash シバンがあり、効果もありません。私のスクリプト (およびそのディレクトリ) のパーミッションは 777 です。ファイルに対して試行した user:group の組み合わせに関係なく、スクリプトは cron またはユーザーに対して実行されません。完全なパス名を使用すると cron が実行され、スクリプト内で環境変数を使用する場合と異なり、効果はありませんでした。
私の修正は、crontab のスクリプト ファイル名の前に「bash」を挿入することでした。例:
00 01 * * * バッシュ $BASH_SCRIPTS/backup_os.sh
(はい、cron は /etc/environment で定義された環境変数を使用しても問題ありません。) また、cron では、スクリプトが別のスクリプトを実行すると、そのスクリプトが「bash を持つように変更されない限り、2 番目のスクリプトは「許可が拒否されました」となります。 " を 2 番目のスクリプトのファイル名の前に付けるか、スクリプトで動作する場合は "source" を使用してください。
その cron を実行するユーザー (cron -e を実行するユーザー) には、そのスクリプトを実行するための適切な権限がありません。つまり、スクリプトに実行フラグがないか、その祖先ディレクトリの一部に実行フラグがないためにスクリプトにアクセスできないかのいずれかです。
次の解決策も試すことができます:
chmod +x post.php
chmod +x bash.sh
echo "* * * * * /home/samitha/bash.sh >> /home/samitha/log/cron.log 2>&1" >> cronjob
chmod +x cronjob
/etc/init.d/crond start #redhat based servers like centos
/etc/init.d/cron start #debian based servers like ubuntu
crontab cronjob