GNU/Linux >> Znalost Linux >  >> Linux

Povolení bash.sh ke spuštění cronu odepřeno

Problém může být v tom, že váš uživatel nemá práva ke spuštění souboru.

Nejprve nastavte příznak spuštění pro váš skript

chmod +x /home/samitha/bash.sh

Poté byste měli zkontrolovat oprávnění pro soubor php pomocí

ls -lah /var/www/Controller

Pokud se nezobrazí vaše uživatelská skupina ani vaše uživatelské jméno, musíte skript spustit s právy superuživatele nebo změnit jeho oprávnění.

První způsob by byl vložit váš záznam do

sudo crontab -e

nebo druhý by byl (což bych nedoporučoval, protože každý by mohl spustit skript voláním vašeho webu)

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

TL;DR:Vložte "bash" před skript v crontab a ve všech skriptech volaných skriptem.

Mám na to opravu. Žádná z předchozích odpovědí mi nefungovala. Mám dva notebooky Asus, na kterých běží Kubuntu (aktualizováno na jádro v5.8) s prakticky identickými konfiguracemi. Nevím, proč jeden má problém a druhý ne. Nicméně po 2 dnech experimentování jsem našel opravu. Doufejme, že někdo znalejší než já najde příčinu.

Cron používá sh místo bash. Zkoušel jsem přidat SHELL=/bin/bash a definovat PATH nad příkazy v crontab a nemělo to žádný účinek. Všechny mé skripty mají na začátku shebang #!/bin/bash, také bez efektu. Oprávnění mých skriptů (a jejich adresářů) jsou 777. Skripty se nespouštějí pro cron nebo uživatele, bez ohledu na to, jakou kombinaci uživatel:skupina jsem na souborech zkusil. Použití úplných názvů cest je cron a uvnitř skriptů neměl žádný účinek, který by se lišil od použití proměnných prostředí.

Moje oprava byla vložit "bash" před název souboru skriptu v crontab. Např.:

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

(Ano, cron nemá problém s použitím mých proměnných prostředí definovaných v /etc/environment.) Také v cronu, když skript spustí jiný skript, druhý skript dostane „povolení odepřeno“, pokud tento skript není upraven tak, aby měl „bash " před názvem souboru 2. skriptu nebo použijte "zdroj", pokud to bude s vaším skriptem fungovat.


Uživatel spouštějící tento cron (ten, kdo provádí cron -e) nemá správná práva ke spuštění tohoto skriptu. To znamená:buď skript postrádá příznak spuštění, nebo jej není možné dosáhnout, protože některé z jeho předchůdců příznak spuštění nemají.


můžete také vyzkoušet následující řešení:

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. Ubuntu - Spusťte příkaz při spuštění pomocí sudo

  2. maven:bash mvn povolení odepřeno

  3. Jak opakovaně spouštět bash skript každých N sekund?

  1. Přidání do $PYTHONPATH pomocí bash skriptu

  2. Po přihlášení spusťte bash skript

  3. Jak zabít python skript pomocí bash skriptu

  1. Jak nastavit Bash, aby spouštěl *.exe s Mono?

  2. Spustit skript s argumenty jako uživatel?

  3. Kali Linux VM:Odepřeno oprávnění ke spuštění skriptu shellu jako root