Primeiro, você deve tentar se concentrar no erro
npm not found
Você diz que quando você executa o script, funciona - suponho que seja este:
#!/bin/bash
cd /opt/project
npm install --production
- você o executou como usuário normal ou como root?
- quando você instala o rpm, eu acho que é como root.
- você tentou colocar o caminho absoluto do npm no script ( onde está npm )
Se o último deles funcionar, o problema é que o npm não está na variável PATH da raiz. Você deve tentar verificar isso (como root):
#echo $PATH
Editar:
Portanto, a variável $ PATH é definida com os caminhos bons e quando você usa o caminho absoluto para npm, ela funciona. Isso significa que o shell não lê a variável PATH para encontrar o executável (em todo o exemplo de scriptlet que encontrei, eles sempre usam fullpath. Tente ver se você pode usar a expansão de comando com a qual:
#!/bin/bash
cd /opt/project
$(which npm) install --production