Pomoc [TS-231P2] Pomocy z crontab!!!

alexm.poland

Nowy użytkownik
Noobie
22 Luty 2023
6
0
1
50
QNAP
TS-x31P2
Ethernet
1 GbE
Dzień dobry!
Bardzo proszę o pomoc, bo jeszcze chwila i wyrwę sobie wszystkie włosy z głowy.
Jestem amatorem, który wykorzystuje NASa do niewielkich zadań opartych na PHP.
Zachciało mi się uruchamiać jeden ze skryptów o wyznaczonej godzinie, ale po wielu godzinach walki poddałem się i proszę o pomoc.
Czy ktoś zechciałby mi łopatologicznie, krok po kroku przedstawić sposób na to, żeby to wszystko zaczęło działać?

Plik ze skryptem (php) znajduje sie w katalogu wirtualnego hosta założonego na webserwerze. Uruchamiany ręcznie działa (wpisując w przeglądarce 192.168.1.100:91/mojskrypt.php).

Połączyłem się ssh, wyedytowałem odpowiednio pliki crontab (i tu pytanie - czy istnieją DWA pliki crontab na urządzeniu? bo w jednym miejscu wyczytałem, że trzeba go edytować wpisując 'crontab -e' a w innym, że 'vi /etc/config/crontab').

Dodałem na końcu linię '30 12 * * * /share/serwertestowy/mojskrypt.php'.

Na pliku mojskrypt.php zmieniłem uprawnienia wpisując 'chmod 755 mojskrypt.php'.

Potem zrestartowałem plik wpisując 'crontab /etc/config/crontab && /etc/init.d/crond.sh restart'.

I nie działa.

Pomocy!
 
Dobra zaciąłem się nie chciał mi zadziałać job uruchamiany co minutę jak zmieniłem na konkretną godzinę i minutę działa.
No więc tak gdzie masz php zainstalowany? U mnie jest w:
Kod:
# /share/CACHEDEV1_DATA/.qpkg/Apache73/bin/php -v
PHP 7.3.33 (cli) (built: Jan 18 2022 08:26:23) ( ZTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.33, Copyright (c) 1998-2018 Zend Technologies
W katalogu /share/serwertestowy mam skrypt mojskrypt.php do wyświetlania czasu:
Kod:
<?php
// Return current date from the remote server
$date = date('d-m-y h:i:s');
echo $date;
?>
dodaje mu uprawnienia wykonywania:
Kod:
chmod +x mojskrypt.php
Według mnie najlepiej dołożyć nowy skrypt sh do uruchomienia pliku php. W tym samym katalogu dokładam plik np. run_mojskrypt.sh
Kod:
#!/bin/sh
/share/CACHEDEV1_DATA/.qpkg/Apache73/bin/php /share/serwertestowy/mojskrypt.php >> /share/serwertestowy/mojskrypt.log 2>&1
Wszędzie mają być pełne ścieżki do plików. Dodatkowo dodałem plik mojskrypt.log który zbiera output z php i błędy.
Dodaje uprawnienia do wykonywania (chmod +x run_mojskrypt.sh).
Dodaje wpis dla sh do crona (vi /etc/config/crontab):
Kod:
47 14 * * * /share/serwertestowy/run_mojskrypt.sh
Zmieniasz minuty godziny według uznania. Odświeżam crona: crontab /etc/config/crontab && /etc/init.d/crond.sh restart
I sprawdzasz czy się plik php wykonuje, czy plik logu się tworzy. Jak nie to dodajesz jakieś logi do run_mojskrypt.sh, albo przechwyć output w cronie:
Kod:
47 14 * * * /share/serwertestowy/run_mojskrypt.sh > /share/serwertestowy/run_mojskrypt.log
 
Bo kiedyś głupio zrobiłem i zakupiłem:
1677075996917.png

Ale już teraz tego nie polecam. Chyba najrozsądniej będzie zainstalować php8:
Kod:
# opkg list | grep php8\ -
apache-mod-php8 - 8.1.7-2 - PHP is a widely-used general-purpose scripting language that is especially suited for Web development and can be embedded into HTML. This package contains the PHP module for the Apache Web Server.
php8 - 8.1.7-2 - PHP is a widely-used general-purpose scripting language that is especially suited for Web development and can be embedded into HTML. This package contains only the PHP config file. You must actually choose your PHP flavour (cli, cgi or fastcgi).  Please note, that installing php5 and php8 in parallel on the same target is not supported in OpenWrt/LEDE/Entware.
albo sprawdzić czy może już jest dostępne w systemie:
Kod:
[~] # which php
[~] #
 
Zanim zdążyłem analizować w szczegółach wskazówki wpadłem na pomysł i uruchomiłem ten krótki skrypt pokazujący aktualny czas na serwerze i mocno się zdziwiłem. Okazało się, że czas pokazywany przez php jest kompletnie inny niż ten ustawiony w opcjach NASa. Zacząłem szperać po sieci i znalazłem informację, że w pliku php.ini może być ustawiony inny region. I tak, okazało się, że z definicji jest tam wpisana Azja! Zmieniłem Azję na Europę i.... czas się zmienił, ale pokazuje teraz jeszcze inną godzinę, 3 w nocy. Oszaleć można.
 
ale offtop !

PHP: date_default_timezone_set - Manual

zmeczyłem się szukaniem jak w PHP ustawić strefę czasową .. umiesz teraz ?
Dzięki, spróbuję.
Problem w tym, że zmieniam php.ini na webserwerze i po ustawieniu na Europe/Berlin (próbowałem też inne europejskie miasta) system pokazuje czas na pewno nie europejski. I to jest dziwne.
Połączono posty:

Naprawdę nie rozumiem o co w tym wszystkim chodzi - wczoraj różnice czasowe były 10-11 godzinne, dzisiaj, po ustawieniu Europe/Warsaw jest już tylko 1 godzina różnicy.

Oto ustawienia samego NASa:
01.png


A tutaj to co ustawiłem w php.ini
02.png

A tutaj co wypluwa skrypt
$date = date('d-m-y h:i:s');
echo $date;
03.png
 
Uff... czas już w porządku, wpisałem Europe/Warsaw bez cudzysłowu i zadziałało prawidłowo! Dzięki za wskazówkę. Wcześniej wpisywałem z cudzysłowem bo tak było defaultowo i wpisywane w ten sposób timezony zmieniały czas pokazywany przez serwer, tyle, że na nieprawidłowy. To teraz biorę się za crontab :)
 

Użytkownicy znaleźli tą stronę używając tych słów:

  1. crontab
  2. QTS 5 crontab
  3. 231p2
  4. Apache