I have set up this upstart script on a Amazon Ec2 Ubuntu 12.04 TLS instance for executing a node.js application. The script uses setuid and setgid.

It works fine without using setuid and setgid but when I use them if fails because the process can't write to /var/log/myapp.log (which is the path I want to use for logging) due to a permission denied error.

/proc/self/fd/9: 13: /proc/self/fd/9: cannot create /var/log/noommi.log: Permission denied

I'm using the default user "ubuntu" for executing the script which is the same user I log in to the machine (I know it would be better to user other user) As I see ubuntu user belongs to adm group which is a group included in /var/log. By executing ls -la (using "ubuntu" user) this is the result for var/log:

drwxr-xr-x 11 root      root      4096 Oct 15 12:05 .
drwxr-xr-x 12 root      root      4096 Oct 12 21:44 ..

This is the content of script /etc/init/myapp.conf:

description "start and stop myapp"
version "1.0"
author "Me!"

start on filesystem and started networking

env HOME=/home/ubuntu/myapp

#Run the script using ubuntu user instead of root.
setuid ubuntu
setgid ubuntu

export HOME=$HOME
chdir $HOME
env PATH=/usr/local/bin:/usr/bin:/bin
env NODE_ENV=development

exec /usr/bin/node server.js > /var/log/myapp.log 2>&1

end script

What should I do in order the script could write the log in /var/log?


remove > /var/log/myapp.log 2>&1 from exec

upstart will log to file: /var/log/upstart/myapp.log (owner:root)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.