GNU/Linux >> Linux Esercitazione >  >> Linux

Autorizzazione negata con bash.sh per eseguire cron

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

Linux
  1. Come impostare Bash per eseguire *.exe con Mono?

  2. Eseguire script con argomenti come utente?

  3. Impossibile interrompere uno script Bash con Ctrl+c?

  4. basename con spazi in uno script bash?

  5. Git non è in grado di creare il permesso del file negato

Automatizza l'elaborazione delle immagini con questo script Bash

Come eseguire uno script Bash {7 metodi}

Come scrivere uno script Bash con esempi

Come eseguire uno script Bash

Esegui il comando bash sulla pipeline jenkins

Kali Linux VM:Autorizzazione negata per eseguire script shell, come root