GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Berechtigung zum Ausführen von cron mit bash.sh verweigert

Das Problem könnte sein, dass Ihr Benutzer keine Rechte zum Ausführen der Datei hat.

Zuerst setzen Sie das Ausführungs-Flag für Ihr Skript

chmod +x /home/samitha/bash.sh

Dann sollten Sie die Berechtigungen für die php-Datei mit

überprüfen
ls -lah /var/www/Controller

Wenn weder Ihre Benutzergruppe noch Ihr Benutzername angezeigt wird, müssen Sie das Skript mit Superuser-Rechten ausführen oder seine Berechtigungen ändern.

Der erste Weg wäre, Ihren Eintrag in

einzufügen
sudo crontab -e

oder die zweite wäre (was ich nicht empfehlen würde, da jeder das Skript ausführen dürfte, indem er Ihre Site aufruft)

 chmod a+x /var/www/Controller/post.php

TL;DR:Fügen Sie "bash" vor dem Skript in crontab und in allen Skripten ein, die vom Skript aufgerufen werden.

Ich habe eine Lösung dafür. Keine der vorherigen Antworten hat bei mir funktioniert. Ich habe zwei Asus-Laptops mit Kubuntu (aktualisiert auf Kernel v5.8) mit praktisch identischen Konfigurationen. Ich weiß nicht warum der eine das Problem hat und der andere nicht. Nach 2 Tagen des Experimentierens fand ich jedoch eine Lösung. Hoffentlich kann jemand, der sich besser auskennt als ich, die Ursache finden.

Cron verwendet sh statt bash. Ich habe versucht, SHELL=/bin/bash hinzuzufügen und PATH über den Befehlen in crontab zu definieren, und es hatte keine Wirkung. Alle meine Skripte haben den #!/bin/bash-Scheiß am Anfang, ebenfalls ohne Wirkung. Die Berechtigungen meiner Skripte (und ihrer Verzeichnisse) sind 777. Die Skripte werden nicht für Cron oder Benutzer ausgeführt, egal welche Kombination von Benutzer:Gruppe ich für die Dateien ausprobiert habe. Die Verwendung vollständiger Pfadnamen ist cron und hatte innerhalb der Skripte keinen anderen Effekt als die Verwendung von Umgebungsvariablen.

Meine Lösung bestand darin, "bash" vor dem Skriptdateinamen in crontab einzufügen. Beispiel:

00 01 * * * bash $BASH_SCRIPTS/backup_os.sh

(Ja, cron hat kein Problem damit, meine in /etc/environment definierten Umgebungsvariablen zu verwenden.) Wenn in cron ein Skript ein anderes Skript ausführt, erhält das zweite Skript außerdem "Zugriff verweigert", es sei denn, dieses Skript wurde so geändert, dass es "bash " vor dem Dateinamen des zweiten Skripts, oder verwenden Sie "source", wenn das mit Ihrem Skript funktioniert.


Der Benutzer, der diesen Cron ausführt (derjenige, der cron -e ausführt), hat keine angemessenen Rechte zum Ausführen dieses Skripts. Das heißt:Entweder fehlt dem Skript das Ausführungs-Flag, oder es ist nicht möglich, es zu erreichen, weil einigen seiner Vorfahren-Verzeichnisse das Ausführungs-Flag fehlt.


Sie können auch die folgende Lösung ausprobieren:

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. Wie kann man Bash so einstellen, dass *.exe mit Mono ausgeführt wird?

  2. Skript mit Argumenten als Benutzer ausführen?

  3. Kann ein Bash-Skript nicht mit Strg + C stoppen?

  4. Überprüfen Sie, wie lange die Ausführung eines Bash-Skripts mit dem Time-Befehl dauert

  5. Basisname mit Leerzeichen in einem Bash-Skript?

Automatisieren Sie die Bildverarbeitung mit diesem Bash-Skript

So führen Sie ein Bash-Skript aus {7 Methoden}

So schreiben Sie ein Bash-Skript mit Beispielen

So führen Sie ein Bash-Skript aus

maven:bash mvn-Berechtigung verweigert

Führen Sie den Bash-Befehl auf der Jenkins-Pipeline aus