Rozpoczęcie zadania Crontab +1 min po @reboot

42

Potrzebujesz skryptu wykonywanego przy każdym ponownym uruchomieniu w +1 minucie. Umieściłem rekord, @rebootale jest za wcześnie na mój skrypt. Jak wykonać go jakiś czas po ponownym uruchomieniu?

Yurij73
źródło
2
Dlaczego jest za wcześnie ? Może skrypt init byłby bardziej odpowiedni (jeśli chodzi o zależności, np. Ten skrypt wymaga najpierw skonfigurowania sieci )?
sr_
mój skrypt musi zostać wykonany po wszystkich innych, ostatnich słowach
Yurij73,
ponieważ twoje zadanie musi zostać wykonane po wszystkim, a ponieważ pojęcie wszystkiego jest dość zmienne (dodanie nowej aplikacji autostart @ reboot nie jest tak rzadkie), myślę, że to od Ciebie zależy, czy umieścisz swoje zadanie w skryptach rc w sposób, w jaki serwery są Twoim celem. Umieszczenie zadania na dole zadań określonych w pliku /etc/rc.local jest zwykle tym, czego potrzebujesz, ale w zależności od konfiguracji uruchamiania systemu może to nie zawsze być prawdą. Przetestuj to i sprawdź, czy to działa dla Ciebie.
MelBurslan,
Brzmi jak skrzynka dla Upstart?
nafg

Odpowiedzi:

64

Czy skrypt ma być uruchamiany tylko minutę po uruchomieniu, czy może być używany także w innych momentach? W pierwszym przypadku możesz dodać sleep 60na początku skryptu, lub w drugim przypadku dodać go do pliku crontab:

@reboot sleep 60 && my_script.sh

Jak jednak wskazał sr_, być może zajmujesz się tym w niewłaściwy sposób, a odpowiedni skrypt init.d lub rc.d byłby bardziej niezawodnym rozwiązaniem.

D_Bye
źródło
1
Lub użyj opcji wiersza polecenia, aby dostosować opóźnienie (np. script -s XCo przełoży się na sleep Xwnętrze skryptu).
Peter
Czy mogę zastosować to do pliku runrunner w /etc/init.d/?
Andres Angel,
@AndresAngel - Przepraszam, nie wiem. Używam FreeBSD, który nie ma taskrunner, ani, w tym przypadku,/etc/init.d
D_Bye
na moim rhel7 sen w ogóle nie działa, śpi wiecznie i nigdy nie wraca.
Inder R Singh
16

Jeśli potrzebujesz wykonać coś po ponownym uruchomieniu, kiedy sieć stanie się dostępna, możesz na przykład napisać jednostkę systemową, która zostanie wykonana w wymaganym czasie (oczywiście będzie to działać tylko w systemach z systememd).

W tym celu utwórz plik /etc/systemd/system/my_script.serviceo następującej treści:

[Unit]
Description=My script that requires network
After=network.target

[Service]
Type=oneshot
ExecStart=/full/path/to/my_script.sh

[Install]
WantedBy=multi-user.target

Następnie wykonaj:

sudo systemctl daemon-reload
sudo systemctl enable my_script

Jesteś skończony!

Envek
źródło
11

Chciałbym użyć at. Jak w:

@reboot echo /root/bin/do_the_stuff | at now + 2 minutes
# at assigns it an execution time truncated to whole minutes,
# so this means it will execute in 1--2 minutes.

... z dodanym wspomnianym zastrzeżeniem, że jeśli naprawdę chcesz uruchomić to po wszystkich innych rzeczach, powinieneś sprawdzić, jak to zrobić w init, którego używa twój system operacyjny.

clacke
źródło