Chciałbym zaplanować uruchamianie polecenia po ponownym uruchomieniu komputera z systemem Linux. Wiem, jak to zrobić, więc polecenie konsekwentnie uruchamia się po każdym ponownym uruchomieniu z @reboot
wpisem crontab, jednak chcę, aby polecenie było uruchamiane tylko raz. Po uruchomieniu należy go usunąć z kolejki poleceń do uruchomienia. Zasadniczo szukam systemu Linux odpowiadającego RunOnce w świecie Windows.
W przypadku, gdy ma to znaczenie:
$ 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
Czy istnieje prosty sposób na wykonanie skryptów?
linux
scheduled-task
Christopher Parker
źródło
źródło
Odpowiedzi:
Utwórz
@reboot
wpis w swoim crontab, aby uruchomić skrypt o nazwie/usr/local/bin/runonce
.Utwórz strukturę katalogów o nazwie
/etc/local/runonce.d/ran
usingmkdir -p
.Utwórz skrypt
/usr/local/bin/runonce
w następujący sposób:Teraz umieścić dowolny skrypt, który chcesz uruchomić przy następnym restarcie (tylko jeden raz) w katalogu
/etc/local/runonce.d
ichown
ichmod +x
go odpowiednio. Po uruchomieniu zostanie przeniesiony doran
podkatalogu, a data i godzina dołączone do jego nazwy. W twoim będzie również wpissyslog
.źródło
man logger
.$file
zmienna zawiera pełną ścieżkę czy tylko nazwę pliku?Naprawdę doceniam wysiłek włożony w odpowiedź Dennisa Williamsona . Chciałem zaakceptować to jako odpowiedź na to pytanie, ponieważ jest ono eleganckie i proste:
Myślę, że jego rozwiązanie byłoby świetne jako gotowa funkcja dystrybucji Linuksa.
To powiedziawszy, napisałem własny skrypt, aby osiągnąć mniej więcej to samo, co rozwiązanie Dennisa. Nie wymaga żadnych dodatkowych kroków konfiguracji i nie wymaga dostępu do konta root.
Zapisz ten skrypt (np
runonce
),chmod +x
i wykonaj:W przypadku literówki możesz usunąć polecenie z kolejki uruchamiania za pomocą opcji -r:
Korzystanie z sudo działa tak, jak byś tego oczekiwał. Przydatne do uruchomienia serwera tylko raz po następnym restarcie.
Niektóre uwagi:
źródło
Utwórz np .
/root/runonce.sh
:Dodaj do
/etc/rc.local
:źródło
Skonfiguruj skrypt w /etc/rc5.d za pomocą S99 i niech sam się usunie po uruchomieniu.
źródło
Możesz to zrobić za pomocą
at
polecenia, chociaż zauważam, że nie możesz (przynajmniej na RHEL 5, na którym testowałem) używaćat @reboot
lubat reboot
, ale możesz użyćat now + 2 minutes
i wtedyshutdown -r now
.Nie wymaga to, aby system działał dłużej niż 2 minuty.
Może być przydatny tam, gdzie chcesz ustawić 0, chociaż wolę raczej, aby polecenie „runonce” było standardowym zestawem.
źródło
atd
zostanie zatrzymany dłużej niż 2 minuty, polecenie może zostać uruchomione podczas zamykania systemu. Można tego uniknąć, zatrzymując sięatd
przed przekazaniem polecenia za pomocą,atd now
a następnie ponownie uruchamiając.Myślę, że ta odpowiedź jest najbardziej elegancka:
Umieść skrypt
/etc/init.d/script
i usuń go sam z ostatnim wierszem:rm $0
Chyba że skrypt jest w 100% odporny na awarie, prawdopodobnie rozsądnie jest obsługiwać wyjątki, aby uniknąć krytycznej pętli błędów.
źródło
Kiedyś
chkconfig
mój system automatycznie uruchamiał skrypt po rozruchu i nigdy więcej. Jeśli twój system używa ckconfig (Fedora, RedHat, CentOs itp.), To zadziała.Najpierw skrypt:
run-once
/etc/init.d/
chkconfig run-once on
Po uruchomieniu systemu skrypt będzie działał raz i nigdy więcej.
To znaczy, nigdy więcej, chyba że tego chcesz. Zawsze możesz ponownie włączyć skrypt za pomocą
chkconfig run-once on
polecenia.Podoba mi się to rozwiązanie, ponieważ umieszcza w systemie jeden i tylko jeden plik oraz ponieważ w razie potrzeby można ponownie wydać polecenie „uruchom raz”.
źródło
w systemach redhat i debian możesz to zrobić z /etc/rc.local, jest to rodzaj autoexec.bat.
źródło