Le problème pourrait être que votre utilisateur n'a pas les droits pour exécuter le fichier.
Vous définissez d'abord l'indicateur d'exécution de votre script
chmod +x /home/samitha/bash.sh
Ensuite, vous devez vérifier les autorisations pour le fichier php avec
ls -lah /var/www/Controller
Si ni votre groupe d'utilisateurs ni votre nom d'utilisateur ne s'affichent, vous devez exécuter le script avec les droits de superutilisateur ou modifier ses autorisations.
La première façon serait de mettre votre entrée dans
sudo crontab -e
ou le second serait (ce que je ne recommanderais pas, car tout le monde serait autorisé à exécuter le script en appelant votre site)
chmod a+x /var/www/Controller/post.php
TL;DR :insérez "bash" avant le script dans crontab et dans tous les scripts appelés par le script.
J'ai un correctif pour cela. Aucune des réponses précédentes n'a fonctionné pour moi. J'ai deux ordinateurs portables Asus exécutant Kubuntu (mis à jour vers le noyau v5.8) avec des configurations pratiquement identiques. Je ne sais pas pourquoi l'un a le problème et pas l'autre. Cependant, après 2 jours d'expérimentation, j'ai trouvé une solution. J'espère que quelqu'un de plus compétent que moi pourra trouver la cause.
Cron utilise sh au lieu de bash. J'ai essayé d'ajouter SHELL=/bin/bash et de définir PATH au-dessus des commandes dans crontab et cela n'a eu aucun effet. Tous mes scripts ont le shebang #!/bin/bash au début, également sans effet. Les autorisations de mes scripts (et de leurs répertoires) sont de 777. Les scripts ne s'exécutent pas pour cron ou les utilisateurs, quelle que soit la combinaison utilisateur:groupe que j'ai essayée sur les fichiers. L'utilisation de noms de chemin complets est cron et à l'intérieur des scripts n'a eu aucun effet différent de l'utilisation de variables d'environnement.
Ma solution consistait à insérer "bash" avant le nom du fichier de script dans crontab. Ex. :
00 01 * * * bash $BASH_SCRIPTS/backup_os.sh
(Oui, cron n'a aucun problème avec l'utilisation de mes variables d'environnement définies dans /etc/environment.) De plus, dans cron, lorsqu'un script exécute un autre script, le deuxième script obtiendra "autorisation refusée" à moins que ce script ne soit modifié pour avoir "bash " avant le nom de fichier du 2ème script, ou utilisez "source" si cela fonctionne avec votre script.
L'utilisateur exécutant ce cron (celui qui exécute cron -e) n'a pas les droits appropriés pour exécuter ce script. Autrement dit :soit le script n'a pas l'indicateur d'exécution, soit il n'est pas possible de l'atteindre car certains de ses répertoires ancêtres n'ont pas l'indicateur d'exécution.
vous pouvez également essayer la solution suivante :
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