Il problema potrebbe essere che il tuo utente non ha i diritti per eseguire il file.
Per prima cosa imposti il flag di esecuzione per il tuo script
chmod +x /home/samitha/bash.sh
Quindi dovresti controllare i permessi per il file php con
ls -lah /var/www/Controller
Se non vengono visualizzati né il tuo gruppo utenti né il tuo nome utente, devi eseguire lo script con i diritti di superutente o modificarne i permessi.
Il primo modo sarebbe inserire la tua voce in
sudo crontab -e
o il secondo sarebbe (cosa che non consiglierei, poiché tutti sarebbero autorizzati a eseguire lo script chiamando il tuo sito)
chmod a+x /var/www/Controller/post.php
TL;DR:inserisci "bash" prima dello script in crontab e in tutti gli script chiamati dallo script.
Ho una soluzione per questo. Nessuna delle risposte precedenti ha funzionato per me. Ho due laptop Asus che eseguono Kubuntu (aggiornato al kernel v5.8) con configurazioni praticamente identiche. Non so perché uno ha il problema e l'altro no. Tuttavia, dopo 2 giorni di sperimentazione ho trovato una soluzione. Spero che qualcuno più esperto di me possa trovare la causa.
Cron sta usando sh invece di bash. Ho provato ad aggiungere SHELL=/bin/bash e definire PATH sopra i comandi in crontab e non ha avuto alcun effetto. Tutti i miei script hanno il #!/bin/bash shebang all'inizio, anche senza alcun effetto. I permessi dei miei script (e delle loro directory) sono 777. Gli script non vengono eseguiti per cron o utenti, indipendentemente dalla combinazione di utente:gruppo che ho provato sui file. L'uso di nomi di percorso completi è cron e all'interno degli script non ha avuto alcun effetto diverso dall'uso delle variabili d'ambiente.
La mia soluzione era inserire "bash" prima del nome file dello script in crontab. Ad esempio:
00 01 * * * bash $BASH_SCRIPTS/backup_os.sh
(Sì, cron non ha problemi con l'utilizzo delle mie variabili di ambiente definite in /etc/environment.) Inoltre, in cron, quando uno script esegue un altro script, il secondo script otterrà "permesso negato" a meno che lo script non venga modificato per avere "bash " prima del nome file del secondo script, oppure usa "source" se funziona con il tuo script.
L'utente che esegue quel cron (quello che esegue cron -e) non ha i diritti appropriati per eseguire quello script. Cioè:o lo script non ha il flag di esecuzione, oppure non è possibile raggiungerlo perché alcune delle sue directory antenate non hanno il flag di esecuzione.
puoi anche provare la seguente soluzione:
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