我想将SysV init脚本委派给每个用户.
与SysV init一样,以S开头的${HOME} /rc.d中的每个项目都将在服务器启动时使用start参数启动.对于服务器关闭,使用以K开头并使用stop参数的服务器关闭相同.
我想过自己编写脚本,但也许已经有了某种实现方式1.总之,它将是/etc/init.d/中的一个脚本,它遍历所有用户并以相关脚本上的用户身份启动runpart.
这里的平台是一个Linux(Debian风格),但我认为该解决方案在各种类Unix平台之间非常便携.
更新:
这里的要点是用户能够创建自己的init脚本,应该在系统启动时代表他们启动.正如Dan Carley指出的那样,服务将无法访问任何系统资产(特权端口,系统日志……).
1.这样我就不必过多考虑所有微妙的安全隐患,比如脚本超时等……
解决方法
你的问题基本上包括答案….一个脚本,它将遍历每个用户家的子目录,寻找可执行脚本.然后它sudo -u user /export/home/user/scripts/scriptname.sh start.您无法控制脚本的功能,因此您需要信任您的用户.
坚持他们编写脚本以接受停止启动重启为$1 param并且他们不应该使用在.profile,.cshrc或.bashrc文件中设置的任何环境变量.该脚本实际上需要是独立的.
#!/usr/bin/bash run_cmd { cd /export/home for HOMEDIR in *; do for SCRIPT in /export/home/$HOMEDIR/scripts/*; do if [ -x $SCRIPT ]; then echo "$ACTION user $HOMEDIR's script $SCRIPT" sudo -u $HOMEDIR $SCRIPT $ACTION & fi done done } case $1 in start) ACTION=start; run_cmd;; stop) ACTION=stop; run_cmd;; restart) ACTION=stop; run_cmd; sleep 60; ACTION=start; run_cmd;; *) echo "$1 not recognized as valid cmd";; esac exit 0
您需要针对您的环境,bash / homedirs等的位置进行调整.