作业以非特权用户身份运行时,在`/ var / run`中创build一个文件夹

我有一些使用setuid作为非特权用户运行的upstart脚本。 应该在/var/run/my-service/var/run/my-service/v1.pid创buildPid文件。

新贵脚本是由一个脚本创build的,脚本也创build了/var/run/my-service并设置了权限,所以一切都起作用。 但是重启后这个文件夹将会消失,服务将会失败。

我试过这个:

 pre-start script [ -n $PID_DIR ] && [ ! -d $PID_DIR ] && mkdir $PID_DIR sudo chown my-user:my-group $PID_DIR end script setuid my-user 

但它不起作用:

 sudo: no tty present and no askpass program specified my-user is not in the sudoers file. This incident will be reported. 

我想这是因为setuid会影响所有进程,即使它是在pre-startsudo start my-service被使用。

如何在服务启动之前创build文件夹并设置权限?

  1. sudo不是任何有关init系统的正确工具。 尽量避免使用它。

  2. setuid和setgid会影响所有新贵的工作,包括开工前的工作。

  3. 这可以很容易地解决以下工作,my-service-prep.conf:

     start on starting my-service task PIDDIR=/var/run/my-service exec install -o my-user -g my-group -d $PIDDIR 

有了这个,你可以在主要的upstart作业中使用setuid和setgid,而不会遇到任何权限错误。