$PATH with grunt exec
grunt does not seem to take the $PATH variable into account. At least in Magento 2 when starting:
grunt exec:<theme> PHP from /usr/bin/php is used instead of the first PHP found in $PATH.
few things to check: inside of nodejs, (if you can put in a console.log in your grunt script that would be ideal) what is the output from console.log(process.cwd()); and console.log(process.env.PATH);. Also, under the same user grunt -- which is probably the user Magento is executing under ... likely apache/nginx's user -- type which php (which you could try executing via grunt-exec). My bet is, either it needs to be run with bash (see options.shell in the readme for grunt-exec) to load the ~/.bashrc containing the path export... or a different $PATH is defined for your user than the one Magento is running under which can likely be found by ps aux | egrep '(apache|httpd|nginx)'.