Laravel 8: Schedule на 1 сървър

dakata__92

Super Moderator
Колеги имам няколко синхронни сървъра. Съответно имам на всичките стартиран крон
Код:
* * * * * php73 /laravel/artisan schedule:run > /dev/null 2>&1
Файловете се синхроницират на всички машини, съответно всяка машина изпълнява експорт командата. Идеята ми е да огранича командата за част от сървърите - не за всичките. Как да го направя?
Код:
protected function schedule(Schedule $schedule)
{
	$server = new Server;
	$ip = '1.0.0.10';
	if ($server->isSetIP($ip) && $_SERVER['SERVER_ADDR'] == $ip) {
		$schedule->command('export')->everyMinute()->withoutOverlapping()->runInBackground();
	}
}

$server->isSetIP($ip) - взима от масив наличните машини и проверява дали има такова IPв масива.
$_SERVER['SERVER_ADDR'] - трещи грешка, че не е сетнат.
Пробвах с request()->server('SERVER_ADDR') - но нещо не сработва като хората.

Как мога в artisan scheduele list да извадя само за този сървър на който се намирам кроновете? Идеята ми е ако в schedule съм подал командата да се изпълнява само когато ip-то на сървъра е равно на него (тоест съм на съответния за ип сървър). Проблема е че тази логика не сработва.
 
Просто спри крон задачата на съответния сървър. Защо всичко вършиш чрез код?
 
Revelation каза:
Просто спри крон задачата на съответния сървър. Защо всичко вършиш чрез код?

Говорим за синхронни сървъри. Ако обновя Кернела, той се синхронизира с всички машини, съответно на всяка една отделна машина се стартират всички процеси в schedule. Идеята ми, е че не всички задачи трябва да се стартират на всички машини. Искам, като синхронизирам файла на един от сървърите да визам IP - то на сървъра и в метода да проверявам ако е въпросният сървър имам ли за него специфични задачи или не.
 
Виж дали можеш да използваш hostname-а на сървъра. Поне знаеш, че всеки сървър има hostname и предполагам сте ги именували подобаващо, за да ги разграничавате.
 
Revelation каза:
Виж дали можеш да използваш hostname-а на сървъра. Поне знаеш, че всеки сървър има hostname и предполагам сте ги именували подобаващо, за да ги разграничавате.

Предполагам, че това ще е добро решение?
Код:
$this->hostname = gethostname();
$this->serverIp = gethostbyname($this->hostname);
 
Нужен ли ти е IP адреса въобще? Ако не ти трябва за друго и ръчно правиш списъка, можеш да работиш само с hostname-а. IP адреса е по-вероятно да се смени (по принцип не би трябвало дори ако се наложи местене на друга машина), отколкото hostname-а.
 
Revelation каза:
Нужен ли ти е IP адреса въобще? Ако не ти трябва за друго и ръчно правиш списъка, можеш да работиш само с hostname-а. IP адреса е по-вероятно да се смени (по принцип не би трябвало дори ако се наложи местене на друга машина), отколкото hostname-а.

ИП адреса ми е необходим. Имам глобална конфигурация от която се управляват активните машини. Съответно ако го направя така спокойно мога да управлявам глобално крон задачите с активните машини, и съответно ако нещо не е наред да спра и прехвърля задачите на друга машина.
 
В такъв случай имплементацията няма значение, стига да работи.
 

Горе