GNU/Linux >> Belajar Linux >  >> Linux

Izin ditolak dengan bash.sh untuk menjalankan cron

Masalahnya mungkin karena pengguna Anda tidak memiliki hak untuk mengeksekusi file tersebut.

Pertama, Anda menyetel flag eksekusi untuk skrip Anda

chmod +x /home/samitha/bash.sh

Maka Anda harus memeriksa izin untuk file php dengan

ls -lah /var/www/Controller

Jika grup pengguna atau nama pengguna Anda tidak muncul, Anda harus menjalankan skrip dengan hak pengguna super atau mengubah izinnya.

Cara pertama adalah memasukkan entri Anda

sudo crontab -e

atau yang kedua adalah (yang tidak saya rekomendasikan, karena semua orang akan diizinkan untuk mengeksekusi skrip dengan memanggil situs Anda)

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

TL;DR:Sisipkan "bash" sebelum skrip di crontab dan skrip apa pun yang dipanggil oleh skrip.

Saya punya perbaikan untuk ini. Tidak ada jawaban sebelumnya yang berhasil untuk saya. Saya memiliki dua laptop Asus yang menjalankan Kubuntu (diperbarui ke kernel v5.8) dengan konfigurasi yang hampir sama. Saya tidak tahu mengapa yang satu bermasalah dan yang lain tidak. Namun, setelah 2 hari percobaan saya menemukan perbaikan. Semoga seseorang yang lebih berpengetahuan daripada saya dapat menemukan penyebabnya.

Cron menggunakan sh bukan bash. Saya mencoba menambahkan SHELL=/bin/bash dan mendefinisikan PATH di atas perintah di crontab dan tidak berpengaruh. Semua skrip saya memiliki #!/bin/bash shebang di awal, juga tanpa efek. Izin skrip saya (dan direktori mereka) adalah 777. Skrip tidak berjalan untuk cron atau pengguna, apa pun kombinasi pengguna:grup yang saya coba pada file. Menggunakan nama jalur lengkap adalah cron dan di dalam skrip tidak memiliki efek yang berbeda dengan menggunakan variabel lingkungan.

Perbaikan saya adalah memasukkan "bash" sebelum nama file skrip di crontab. Misalnya:

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

(Ya, cron tidak memiliki masalah dengan menggunakan variabel lingkungan saya yang didefinisikan di /etc/environment.) Juga, di cron, ketika skrip menjalankan skrip lain, skrip kedua akan mendapatkan "izin ditolak" kecuali skrip tersebut dimodifikasi untuk memiliki "bash " sebelum nama file skrip ke-2, atau gunakan "sumber" jika itu sesuai dengan skrip Anda.


Pengguna yang mengeksekusi cron itu (orang yang mengeksekusi cron -e) tidak memiliki hak yang sesuai untuk mengeksekusi skrip itu. Yaitu:skrip tidak memiliki flag eksekusi, atau tidak mungkin menjangkaunya karena beberapa direktori leluhurnya tidak memiliki flag eksekusi.


Anda juga dapat mencoba solusi berikut:

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. Bagaimana Cara Mengatur Bash Untuk Menjalankan *.exe Dengan Mono?

  2. Jalankan Script Dengan Argumen Sebagai Pengguna?

  3. Tidak Dapat Menghentikan Skrip Bash Dengan Ctrl+c?

  1. Periksa Berapa Lama Skrip Bash Dijalankan Dengan Perintah Waktu

  2. nama dasar dengan spasi dalam skrip bash?

  3. Ubuntu - Jalankan perintah saat start-up dengan sudo

  1. Git tidak dapat membuat izin file ditolak

  2. Menambahkan ke $PYTHONPATH dengan skrip bash

  3. Jalankan skrip bash setelah login