Eu "terceirizo" o trabalho para um script bash:
start on runlevel [2345]
respawn
script
exec /path/to/bash/script
end script
o script
#! /bin/bash -e
su - ubuntu -c "cd /opt/app; bin/widget" |& logger -t 'widget'
exit ${PIPESTATUS[0]}
O array PIPESTATUS
em bash armazena os valores de retorno do pipe, neste caso usamos o valor de retorno do comando su
.