GNU/Linux >> Tutoriels Linux >  >> Linux

Autorisation refusée avec bash.sh pour exécuter cron

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

Linux
  1. Comment configurer Bash pour qu'il exécute *.exe avec Mono ?

  2. Exécuter le script avec des arguments en tant qu'utilisateur ?

  3. Impossible d'arrêter un script Bash avec Ctrl+c ?

  4. Vérifiez combien de temps un script bash prend pour s'exécuter avec la commande Time

  5. nom de base avec des espaces dans un script bash ?

Automatisez le traitement des images avec ce script Bash

Comment exécuter un script bash {7 méthodes}

Comment écrire un script bash avec des exemples

Comment exécuter un script bash

Exécuter le script bash après la connexion

Exécutez la commande bash sur le pipeline jenkins