123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- <?php
-
- namespace Illuminate\Console\Scheduling;
-
- use Illuminate\Console\Application;
- use Illuminate\Support\ProcessUtils;
-
- class CommandBuilder
- {
- /**
- * Build the command for the given event.
- *
- * @param \Illuminate\Console\Scheduling\Event $event
- * @return string
- */
- public function buildCommand(Event $event)
- {
- if ($event->runInBackground) {
- return $this->buildBackgroundCommand($event);
- }
-
- return $this->buildForegroundCommand($event);
- }
-
- /**
- * Build the command for running the event in the foreground.
- *
- * @param \Illuminate\Console\Scheduling\Event $event
- * @return string
- */
- protected function buildForegroundCommand(Event $event)
- {
- $output = ProcessUtils::escapeArgument($event->output);
-
- return $this->ensureCorrectUser(
- $event, $event->command.($event->shouldAppendOutput ? ' >> ' : ' > ').$output.' 2>&1'
- );
- }
-
- /**
- * Build the command for running the event in the background.
- *
- * @param \Illuminate\Console\Scheduling\Event $event
- * @return string
- */
- protected function buildBackgroundCommand(Event $event)
- {
- $output = ProcessUtils::escapeArgument($event->output);
-
- $redirect = $event->shouldAppendOutput ? ' >> ' : ' > ';
-
- $finished = Application::formatCommandString('schedule:finish').' "'.$event->mutexName().'"';
-
- return $this->ensureCorrectUser($event,
- '('.$event->command.$redirect.$output.' 2>&1 '.(windows_os() ? '&' : ';').' '.$finished.') > '
- .ProcessUtils::escapeArgument($event->getDefaultOutput()).' 2>&1 &'
- );
- }
-
- /**
- * Finalize the event's command syntax with the correct user.
- *
- * @param \Illuminate\Console\Scheduling\Event $event
- * @param string $command
- * @return string
- */
- protected function ensureCorrectUser(Event $event, $command)
- {
- return $event->user && ! windows_os() ? 'sudo -u '.$event->user.' -- sh -c \''.$command.'\'' : $command;
- }
- }
|