Saya ingin menjadwalkan perintah untuk dijalankan setelah reboot pada kotak Linux. Saya tahu bagaimana melakukan ini sehingga perintah secara konsisten berjalan setelah setiap reboot dengan @reboot
entri crontab, namun saya hanya ingin perintah dijalankan sekali. Setelah berjalan, harus dihapus dari antrian perintah untuk dijalankan. Saya pada dasarnya mencari Linux yang setara dengan RunOnce di dunia Windows.
Dalam hal itu penting:
$ uname -a
Linux devbox 2.6.27.19-5-default #1 SMP 2009-02-28 04:40:21 +0100 x86_64 x86_64 x86_64 GNU/Linux
$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
$ cat /etc/SuSE-release
SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 0
Apakah ada cara mudah dan skrip untuk melakukan ini?
linux
scheduled-task
Christopher Parker
sumber
sumber
Jawaban:
Buat
@reboot
entri di crontab Anda untuk menjalankan skrip bernama/usr/local/bin/runonce
.Buat struktur direktori yang disebut
/etc/local/runonce.d/ran
usingmkdir -p
.Buat skrip
/usr/local/bin/runonce
sebagai berikut:Sekarang menempatkan script apapun yang Anda ingin dijalankan pada reboot berikutnya (sekali saja) di direktori
/etc/local/runonce.d
danchown
danchmod +x
itu tepat. Setelah dijalankan, Anda akan menemukannya dipindahkan keran
subdirektori dan tanggal dan waktu ditambahkan ke namanya. Juga akan ada entri di blog Andasyslog
.sumber
man logger
.$file
variabel berisi path lengkap atau hanya nama file?Saya sangat menghargai upaya yang dimasukkan ke dalam jawaban Dennis Williamson . Saya ingin menerimanya sebagai jawaban untuk pertanyaan ini, karena elegan dan sederhana, namun:
Saya pikir solusinya akan bagus sebagai fitur out-of-the-box dari distribusi Linux.
Yang sedang berkata, saya menulis skrip saya sendiri untuk menyelesaikan kurang lebih hal yang sama dengan solusi Dennis. Itu tidak memerlukan langkah-langkah pengaturan tambahan dan tidak memerlukan akses root.
Simpan script ini (misalnya:
runonce
),chmod +x
, dan menjalankan:Jika terjadi kesalahan ketik, Anda dapat menghapus perintah dari antrian runonce dengan flag -r:
Menggunakan sudo berfungsi seperti yang Anda harapkan berfungsi. Berguna untuk memulai server hanya sekali setelah reboot berikutnya.
Beberapa catatan:
sumber
Buat misalnya
/root/runonce.sh
:Tambahkan ke
/etc/rc.local
:sumber
Siapkan skrip di /etc/rc5.d dengan S99 dan hapus sendiri setelah dijalankan.
sumber
Anda dapat melakukan ini dengan
at
perintah, meskipun saya perhatikan Anda tidak dapat (setidaknya pada RHEL 5, yang saya uji coba) menggunakanat @reboot
atauat reboot
, tetapi Anda dapat menggunakanat now + 2 minutes
dan kemudianshutdown -r now
.Ini tidak mengharuskan sistem Anda membutuhkan waktu lebih dari 2 menit untuk berjalan.
Mungkin berguna di mana Anda ingin 0 pengaturan, meskipun saya lebih suka perintah 'runonce' adalah kit standar.
sumber
atd
dihentikan, perintah Anda dapat berjalan selama pematian. Ini bisa dihindari dengan menghentikanatd
sebelum menjadwalkan perintah denganatd now
dan kemudian reboot.Saya pikir jawaban ini adalah yang paling elegan:
Tempatkan skrip
/etc/init.d/script
dan hapus sendiri dengan baris terakhir:rm $0
Kecuali skripnya 100% gagal-bukti, mungkin bijaksana untuk menangani pengecualian untuk menghindari loop kesalahan fatal ..
sumber
Dulu
chkconfig
sistem saya secara otomatis menjalankan skrip sekali setelah boot dan tidak pernah lagi. Jika sistem Anda menggunakan ckconfig (Fedora, RedHat, CentOs, dll) ini akan berfungsi.Pertama skrip:
run-once
/etc/init.d/
chkconfig run-once on
Saat sistem melakukan boot, skrip Anda akan berjalan sekali dan tidak pernah lagi.
Yaitu, tidak akan pernah lagi kecuali Anda menginginkannya. Anda selalu dapat mengaktifkan kembali skrip dengan
chkconfig run-once on
perintah.Saya suka solusi ini karena menempatkan satu dan hanya satu file pada sistem dan karena perintah run-once dapat dikeluarkan kembali jika diperlukan.
sumber
dalam sistem redhat dan debian Anda dapat melakukannya dari /etc/rc.local, ini semacam autoexec.bat.
sumber