Как запустить grunt со стороны php?
> Но бональный exec('grunt') не спасает.
Значит, делаете что-то не так. Должен спасать. Напишите поподробнее, в чем проблема с exec-ом.
Видимо вопрос в переменных окружения.
Попробуйте в начале скрипта указать
putenv('PATH=' . getenv('PATH') . ':/usr/local/bin');
И ваш скрипт будет знать, что искать node нужно в /usr/local/bin. Ну или где укажете