Portál AbcLinuxu, 12. května 2025 15:41
Dobry den, mam nasledujic skript, ktery je umisten v adresari ~/scripts/
#!/bin/bash while true; do date >> output.txt echo "Writing date to file (`date`)" sleep 1 done
Chci, aby se tento skript spustil hned po spusteni, aby se spustil v mem domovskem adresari a aby jeho vystup byl presmerovan do souboru redir.txt
Pouzivam distribuci Arch Linux a proto jsem do souboru /etc/rc.local zapsal toto:
#!/bin/bash # # /etc/rc.local: Local multi-user startup script. # cd ~/ ~/scripts/script.sh > redir.txt
Nyni kdyz restaruji pc, jedine co se stane je, ze se vytvori soubor redir.txt v adresari / a navic je prazdny. Co jsem prosim udelal spatne, ze tento postup nefunguje, tak jak bych potreboval?
/home/kudlak/scripts/script.sh > /home/kudlak/redir.txt
Předně nepoužívej ~
, ale absolutní cesty, navíc ber v potaz, že se init skripty vykonávají pod uživatelem root. A dále, že jsi dal do /etc/rc.local nikdy nekončící skript a zároveň čekáš na jeho dokončení tj. až se Ti ho povede spustit, tak zůstaneš při bootování viset, protože se bude čekat na jeho dokončení
Jinak Tvůj problém lze vyřešit pomocí crontab v režii uživatele:
$ crontab -e */1 * * * * /home/ondra/scripts/script.sh
A skript.sh očesat na:
date >> output.txt echo "Writing date to file (`date`)" > redir.txt
Nyní se Ti hned po startu systému bude 1x za minutu volat Tvůj skript a není třeba, aby visel v nekonečné smyčce.
Pokud chceš řešit jiný problém a tohle byl pouze Tvůj testík, tak nám rovnou nastiň co potřebuješ vyřešit, lépe se pak odpovídá...
Dekuji za reakce, pomohlo tam dat vsude absolutni cesty. S tim zacyklenim pri bootu nemate pravdu, skript se rozbehne, zapisuje do souboru redir.txt i output.txt a system normalne nabehne. Jedine s cim mam jeste problem je soubor output.txt. Ten se totiz tvori v adresari / a tam ho nechci. Jde nejak urcit, kde se tento soubor vytvori aniz bych to musel upravovat primo ve skriptu (nechci do nej cpat absolutni cesty).
Jinak co se tyce ucelu skriptu, je to toto samozrejme je maly testik, "pravy" skript je napsany v pythonu a v nekonecne smycce provadi urcite akce - scanuje adresy v lokalni siti a dela statistiky. Reseni pres cron nevidim jako prilis realne, jelikoz spoustet ho jednou za minutu je malo - za ten cas se uz mohlo provest x obratek cyklu a zde plati, ze cim vice, time lepe.
output.txt
našel :) Tak ten by měl vznikat v ~/ když jste se do něj přepnul, nevím proč to tak není.
echo ~
a pwd
.
S tim zacyklenim pri bootu nemate pravdu, skript se rozbehne, zapisuje do souboru redir.txt i output.txt a system normalne nabehne.
Tomu se mi nechce věřit, v tom případě by v Archlinuxu /etc/rc.local
fungoval jinak než na Debianu. U mě se s ním pracuje takhle (viz /etc/init.d/rc.local
):
do_start() { if [ -x /etc/rc.local ]; then [ "$VERBOSE" != no ] && log_begin_msg "Running local boot scripts (/etc/rc.local)" /etc/rc.local ES=$? [ "$VERBOSE" != no ] && log_end_msg $ES return $ES fi }
Tj. čeká se na jeho dokončení a vrací se návratová hodnota, takže pokud spustím nekonečnou smyčku na popředí, tak se bude čekat na její dokončení a boot/start služby nebude nikdy dokončen.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.