DEV Community

Cover image for Executing Shell Commands In Laravel
Bertug Korucu for Kodeas

Posted on

Executing Shell Commands In Laravel

Both shell_exec() and exec() do the job - until they don't.

If your command crash for some reason, you won't know - shell_exec() and exec() don't throw Exceptions. They just fail silently. 😱

So, here is my solution to encounter this problem:

use Symfony\Component\Process\Process; class ShellCommand { public static function execute($cmd): string { $process = Process::fromShellCommandline($cmd); $processOutput = ''; $captureOutput = function ($type, $line) use (&$processOutput) { $processOutput .= $line; }; $process->setTimeout(null) ->run($captureOutput); if ($process->getExitCode()) { $exception = new ShellCommandFailedException($cmd . " - " . $processOutput); report($exception); throw $exception; } return $processOutput; } } 
Enter fullscreen mode Exit fullscreen mode

It utilises Symfony's Process (which comes out of the box to Laravel).

With this way, I can throw a custom exception, log the command and the output to investigate, report it to my logs to investigate, etc.

No more failing silently 😇

Hope you like this little piece! If you do, please give it a ❤️

Top comments (5)

Collapse
 
phpdevvn profile image
https://yhub.io Download video

Thank you so much!

Collapse
 
muetze profile image
Norman Huth

Simple use Laravel Processes:
laravel.com/docs/10.x/processes

Collapse
 
reynoldgan profile image
reynold

Thanks!

Collapse
 
awaiscb profile image
Awais

Thanks Where to keep this file in project?

Collapse
 
bertugkorucu profile image
Bertug Korucu Kodeas

In a smaller project, I'd create a "app/Helpers" directory