GNU/Linux >> Belajar Linux >  >> Linux

@reboot Crontab Hanya Berfungsi Untuk Root?

man 5 crontab cukup jelas tentang cara menggunakan crontab untuk menjalankan skrip saat boot:

   These special time specification "nicknames" are supported, which replace the 5 initial time and date
   fields, and are prefixed by the `@` character:
   @reboot    :    Run once after reboot.

Jadi saya dengan senang hati menambahkan satu baris ke crontab saya (di bawah akun pengguna saya, bukan root):

@reboot     /home/me/myscript.sh

Tetapi untuk beberapa alasan, myscript.sh tidak akan berjalan saat mesin di-boot ulang.
(berjalan dengan baik jika saya memanggilnya dari baris perintah, jadi ini bukan masalah izin)

Apa yang saya lewatkan?

Update untuk menjawab pertanyaan @Anthon:

  1. Versi Oracle-linux:5.8 (uname:2.6.32-300.39.2.el5uek #1 SMP)
  2. Versi cron:vixie-cron-4.1-81.el5.x86_64
  3. Ya, /home adalah partisi yang terpasang. Sepertinya ini masalahnya. Bagaimana cara mengatasinya?
  4. Saat ini, myscript.sh hanya menggemakan pesan teks ke file di /home/me .

Jawaban yang Diterima:

Ini bisa menjadi topik yang sedikit membingungkan karena ada implementasi yang berbeda dari cron. Juga ada beberapa bug yang merusak fitur ini, dan ada juga beberapa kasus penggunaan yang tidak berfungsi, khususnya jika Anda melakukan shutdown/boot vs. reboot.

Bug

titik data #1

Salah satu bug tersebut di Debian dibahas di sini, berjudul:cron:@reboot jobs is not run. Ini sepertinya telah berhasil masuk ke Ubuntu juga, yang tidak dapat saya konfirmasikan secara langsung.

titik data #2

Bukti bug di Ubuntu tampaknya akan dikonfirmasi di sini di SO Q&A berjudul:@reboot cronjob not execution.

kutipan

komentar #1:…. 3) versi crond Anda mungkin tidak mendukung @reboot apakah Anda menggunakan crond vix? … tampilkan hasil crontab -l -u user

komentar #2:… Mungkin ide yang baik untuk mengaturnya sebagai skrip init daripada mengandalkan versi tertentu dari @reboot cron.

komentar #3:… @MarkRoberts menghapus reboot dan memodifikasi 1 * * * * , menjadi */1 * * * * , masalah terpecahkan! Di mana saya mengirim perwakilan pts Mark? Terima kasih!

Jawaban yang diterima dalam T&J itu juga memiliki komentar ini:

Sepertinya saya Lubuntu tidak mendukung sintaks @Reboot Cron.

Bukti tambahan

titik data #3

Sebagai bukti tambahan, ada utas ini bahwa seseorang mencoba hal yang sama dan menjadi frustrasi karena tidak berhasil. Judulnya:Thread:Cron – @reboot jobs not working.

kutipan

Re:Cron – pekerjaan @reboot tidak berfungsi

Quote Awalnya Dikirim oleh ceallred View Post
Ini membunuh saya… Mencoba skrip pembungkus. Menjalankan secara manual menghasilkan file log… me-reboot dan pekerjaan tidak berjalan atau membuat file log.

Syslog menunjukkan bahwa CRON menjalankan pekerjaan… tetapi sekali lagi, tidak ada output dan proses tidak berjalan.
15 Jul 20:07:45 RavenWing cron[1026]:(CRON) INFO (Menjalankan @reboot pekerjaan)
15 Jul 20:07:45 RavenWing CRON[1053]:(ceallred) CMD (/home/ceallred/Scripts/run_spideroak.sh> /home/ceallred/Scripts/SpiderOak.log 2>&1 &)

Sepertinya cron tidak menyukai perintah @reboot…. Ada ide lain?

Oke ... Sebagian terpecahkan. Saya akan menandai yang ini sebagai terpecahkan dan memulai utas baru dengan masalah baru…..

Saya pikir jawabannya adalah direktori home terenkripsi saya tidak dipasang ketika CRON mencoba menjalankan skrip (disimpan di /home/username/scripts). Dipindahkan ke /usr/scripts dan pekerjaan berjalan seperti yang diharapkan.

Jadi sekarang tampaknya menjadi masalah spideroak. Proses dimulai, tetapi pada saat proses boot selesai, itu hilang. Saya menduga crash untuk beberapa alasan .... Utas baru untuk menanyakan hal itu.

Terima kasih atas semua bantuannya!

Setelah pengguna di atas menemukan masalahnya, dia bisa mendapatkan @reboot mengerjakan entri crontab pengguna.

Terkait:Mengapa tidak dapat menemukan read /run/user/1000/gvfs meskipun dijalankan sebagai root?

Saya tidak sepenuhnya yakin versi cron apa yang digunakan di Ubuntu, tetapi ini tampaknya menunjukkan bahwa pengguna dapat menggunakan @reboot juga, atau bahwa bug telah diperbaiki di beberapa titik di versi cron berikutnya.

titik data #4

Saya menguji pada CentOS 6 berikut ini dan berhasil.

Contoh

$ crontab -l
@reboot echo "hi" > /home/sam/reboot.txt 2>&1

Saya kemudian me-reboot sistem.

$ sudo reboot

Setelah reboot.

$ cat reboot.txt 
hi

Bawa pulang

  1. Fitur ini tampaknya didukung untuk entri crontab sistem dan pengguna.
  2. Anda harus memastikan bahwa itu didukung/berfungsi di distro dan/atau versi paket cron Anda.

Untuk mengetahui lebih lanjut tentang bagaimana mekanisme sebenarnya bekerja untuk @reboot Saya memang menemukan posting blog ini yang membahas jeroan. Judulnya:@reboot – menjelaskan keajaiban cron sederhana.

Men-debug crond

Anda dapat meningkatkan verbositas crond dengan menambahkan yang berikut ini ke file konfigurasi ini di distro berbasis RHEL/CentOS/Fedora.

$ more crond 
# Settings for the CRON daemon.
# CRONDARGS= :  any extra command-line startup arguments for crond
CRONDARGS="-L 2"

Level yang valid adalah 0, 1, atau 2. Untuk mengembalikan file ini ke level logging default, cukup hapus "-L 2" setelah Anda selesai men-debug situasi.


Linux
  1. PYTHONPATH tidak berfungsi untuk sudo di GNU/Linux (berfungsi untuk root)

  2. Apa kata sandi root default untuk MySQL 5.7

  3. @reboot tidak berfungsi di CRON

  1. Linux temukan/cari partisi root HANYA?

  2. Di mana .bashrc untuk root?

  3. Aktifkan kata sandi sederhana untuk pengguna root di CentOS

  1. Kiat Linux untuk menggunakan cron untuk menjadwalkan tugas

  2. Cara menggunakan @reboot di /etc/cron.d

  3. Jadikan file hanya dapat dibaca di Linux bahkan untuk root