sziasztok,
Az alábbi NAS-on szeretnék egy bash scriptet futtatni:
http://synology.hu/?oldal=termek_ds112j
A problémám az hogy a következő sorra hibát kapok:
YESTERDAY=$(date -d "yesterday" +"%Y%m%d")
A "yesterday" és a "1 days ago" sem működik.
Ez a sor ubuntu alatt hibátlanul lefut. Van valakinek ötlete, milyen módon hivatkozhatnék a tegnapi napra ezen a masinán?
- 4308 megtekintés
Hozzászólások
A hibauzenetetedet kiszurte az internet.
Be tudnad vhogy megis varazsolni?
Egyebkent gondolom busybox van benne, talald ki, hogy azon hogyan kell.
tompos
- A hozzászóláshoz be kell jelentkezni
"date: invalid date 'yesterday'"
- A hozzászóláshoz be kell jelentkezni
Ubuntun próbáld ezt: date -d '-1 day' +'%Y%m%d'
FreeBSD-n: date -v-1d '+%Y%m%d'
A Linux disztrókhoz a GNU féle coreutils-ból érkező van. A FreeBSD-ben viszont ez áll a man oldal alján:
STANDARDS
The date utility is expected to be compatible with IEEE Std 1003.2
(``POSIX.2''). The -d, -f, -j, -n, -r, -t, and -v options are all exten-
sions to the standard.
HISTORY
A date command appeared in Version 1 AT&T UNIX.
- A hozzászóláshoz be kell jelentkezni
fentebb kiderült hogy busybox-om van.
- A hozzászóláshoz be kell jelentkezni
Teljesen mind1. :) Ha GNU date-et használ, akkor a fenti, ha POSIX kompatibiliset, akkor pedig a másik példa.
- A hozzászóláshoz be kell jelentkezni
"date: invalid option -- v"
- A hozzászóláshoz be kell jelentkezni
Ubuntun a gnu féle date van, ezért abban van ilyen. Busyboxban meg nincs olyan.
A busybox manja nem is említi sehol, hogy tudna relatív időket...
- A hozzászóláshoz be kell jelentkezni
Ezzel a függvénykészlettel hogy tudnék kivonni 86400-at a timestamp-ből, majd ilyen (%Y%m%d) formátummal egy változóba tenni? Egyszerűen a kivonásra se tudom rábírni.
- A hozzászóláshoz be kell jelentkezni
A kivonásra ne a busyboxot mint date parancsot, hanem a busyboxot, mint shell-t beszéld rá:
parancssorban a $(( a - b )) formát a shell a kifejezés értékével helyettesíti. Azaz a
date +%s kiírja az aktuális időpontot másodpercekben, a $(( $(date +%s) - 24 * 60 * 60 )) pedig a kiírt másodperc értékből kivonja a kívánt 1 napot. Már csak a date -et kell rábeszélni, hogy ezt a másodperc értéket fogadja el dátumként, és azt írja ki a neked megfelelő formában. Mivel az én busyboxom a date: applet not found üzenettel honorálja a busybox date --help parancsot, kénytelen leszel a sajátodon ellenőrizni, hogy ez utóbbihoz neki milyen opció kell. (A GNU-féle és a FreeBSD-féle ugyanis eltérő opciókat használ ehhez.)
Szerk: most nézem, hogy felettem a link majdnem ugyanezt mondja. Javasolnám a ./busybox date helyett a sima date formát ;-) ugyanis nm hiszem, hogy találsz az aktuális könyvtárban busybox-ot. Szóval ha jól látom, akkor
date -D %s -d $(( $(date +%s) - 24 * 60 * 60 ))
- A hozzászóláshoz be kell jelentkezni
nagyon szépen köszönöm
szerk:
ez lett a megoldás
busybox date -D %s -d $(( $(busybox date +%s) - 24 * 60 * 60 )) +"%Y%m%d"
- A hozzászóláshoz be kell jelentkezni
Van egy másik gond is ezzel a géppel. Újraindítás (normális és áramszünet esetén is) után eltűnik az a sor az /etc/crontab-ból, ami futtatja a srciptet. De csak az amit én írtam be. Egy alapból bent lévő (csomagfrissítés) ott marad. Mintha indításnál visszaállna defaultra. Van valakinek ötlete miért csinálja ezt?
szerk:
a szóközöket le kellett cserélni tabokra, így nem törli a sort újraindításkor.
- A hozzászóláshoz be kell jelentkezni