Skip to content

Commit 5453043

Browse files
Support to manage multiple instances in the same crontab, based on installation directory
1 parent 6e49308 commit 5453043

File tree

1 file changed

+38
-13
lines changed

1 file changed

+38
-13
lines changed

lib/internal/Magento/Framework/Crontab/CrontabManager.php

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
*/
66
namespace Magento\Framework\Crontab;
77

8-
use Magento\Framework\ShellInterface;
9-
use Magento\Framework\Phrase;
8+
use Magento\Framework\App\Filesystem\DirectoryList;
109
use Magento\Framework\Exception\LocalizedException;
1110
use Magento\Framework\Filesystem;
12-
use Magento\Framework\App\Filesystem\DirectoryList;
11+
use Magento\Framework\Phrase;
12+
use Magento\Framework\ShellInterface;
1313

1414
/**
1515
* Manager works with cron tasks
@@ -38,14 +38,38 @@ public function __construct(
3838
$this->filesystem = $filesystem;
3939
}
4040

41+
/**
42+
* @return string
43+
*/
44+
private function getTasksBlockStart()
45+
{
46+
$tasksBlockStart = self::TASKS_BLOCK_START;
47+
if (defined('BP')) {
48+
$tasksBlockStart .= ' ' . md5(BP);
49+
}
50+
return $tasksBlockStart;
51+
}
52+
53+
/**
54+
* @return string
55+
*/
56+
private function getTasksBlockEnd()
57+
{
58+
$tasksBlockEnd = self::TASKS_BLOCK_END;
59+
if (defined('BP')) {
60+
$tasksBlockEnd .= ' ' . md5(BP);
61+
}
62+
return $tasksBlockEnd;
63+
}
64+
4165
/**
4266
* {@inheritdoc}
4367
*/
4468
public function getTasks()
4569
{
4670
$this->checkSupportedOs();
4771
$content = $this->getCrontabContent();
48-
$pattern = '!(' . self::TASKS_BLOCK_START . ')(.*?)(' . self::TASKS_BLOCK_END . ')!s';
72+
$pattern = '!(' . $this->getTasksBlockStart() . ')(.*?)(' . $this->getTasksBlockEnd() . ')!s';
4973

5074
if (preg_match($pattern, $content, $matches)) {
5175
$tasks = trim($matches[2], PHP_EOL);
@@ -61,14 +85,14 @@ public function getTasks()
6185
*/
6286
public function saveTasks(array $tasks)
6387
{
64-
$this->checkSupportedOs();
65-
$baseDir = $this->filesystem->getDirectoryRead(DirectoryList::ROOT)->getAbsolutePath();
66-
$logDir = $this->filesystem->getDirectoryRead(DirectoryList::LOG)->getAbsolutePath();
67-
6888
if (!$tasks) {
6989
throw new LocalizedException(new Phrase('List of tasks is empty'));
7090
}
7191

92+
$this->checkSupportedOs();
93+
$baseDir = $this->filesystem->getDirectoryRead(DirectoryList::ROOT)->getAbsolutePath();
94+
$logDir = $this->filesystem->getDirectoryRead(DirectoryList::LOG)->getAbsolutePath();
95+
7296
foreach ($tasks as $key => $task) {
7397
if (empty($task['expression'])) {
7498
$tasks[$key]['expression'] = '* * * * *';
@@ -114,11 +138,11 @@ public function removeTasks()
114138
private function generateSection($content, $tasks = [])
115139
{
116140
if ($tasks) {
117-
$content .= self::TASKS_BLOCK_START . PHP_EOL;
141+
$content .= $this->getTasksBlockStart() . PHP_EOL;
118142
foreach ($tasks as $task) {
119-
$content .= $task['expression'] . ' ' . PHP_BINARY . ' '. $task['command'] . PHP_EOL;
143+
$content .= $task['expression'] . ' ' . PHP_BINARY . ' ' . $task['command'] . PHP_EOL;
120144
}
121-
$content .= self::TASKS_BLOCK_END . PHP_EOL;
145+
$content .= $this->getTasksBlockEnd() . PHP_EOL;
122146
}
123147

124148
return $content;
@@ -133,7 +157,8 @@ private function generateSection($content, $tasks = [])
133157
private function cleanMagentoSection($content)
134158
{
135159
$content = preg_replace(
136-
'!' . preg_quote(self::TASKS_BLOCK_START) . '.*?' . preg_quote(self::TASKS_BLOCK_END . PHP_EOL) . '!s',
160+
'!' . preg_quote($this->getTasksBlockStart()) . '.*?'
161+
. preg_quote($this->getTasksBlockEnd() . PHP_EOL) . '!s',
137162
'',
138163
$content
139164
);
@@ -192,7 +217,7 @@ private function checkSupportedOs()
192217
{
193218
if (stripos(PHP_OS, 'WIN') === 0) {
194219
throw new LocalizedException(
195-
new Phrase('Your operation system is not supported to work with this command')
220+
new Phrase('Your operating system is not supported to work with this command')
196221
);
197222
}
198223
}

0 commit comments

Comments
 (0)