我想委托SysV初始化脚本给每个用户。
像SysV init一样,以S开头的${HOME}/rc.d每个项目都将在start参数的服务器启动时start 。 服务器以K开头, stop参数closures也是一样的。
我想自己编写脚本,但也许已经有一些实现了1 。 总之,它将是/etc/init.d/中的一个脚本,它遍历所有的用户,并以相关脚本的用户身份启动runparts 。
这里的平台是一个Linux(Debian风格),但是我认为这个解决scheme在各种Unix类平台中是相当便携的。
这里的重点是用户能够创build他们自己的初始化脚本,当系统启动时它们将代表它们启动。 正如Dan Carley所指出的那样,这些服务将无法访问任何系统资产(特权端口,系统日志,…)。
这样我就不必考虑所有微妙的安全隐患,比如脚本超时了。
你的问题基本上包括答案….一个脚本,将遍历每个用户家的子目录,寻找可执行的脚本。 然后sudo -u用户/export/home/user/scripts/scriptname.sh启动。 你将无法控制脚本的function,所以你需要信任你的用户。
坚持要他们写脚本来接受停止启动,重启为$ 1参数,并且不要使用在.profile,.cshrc或.bashrc文件中设置的任何环境variables。 脚本有效地需要是独立的。
#!/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的位置等。
这里的重点是用户能够创build他们自己的初始化脚本,当系统启动时它们将代表它们启动。
这在大多数系统上已经可以使用cron工具。 只需指导您的用户执行以下操作:
crontab -e
@reboot /home/user/script argument
更多信息: http : //www.cyberciti.biz/faq/linux-execute-cron-job-after-system-reboot/
我不太清楚你想实现什么,但对我来说,这听起来有点类似于.profile和.bash_logout,它们在用户启动一个shell或者退出一个shell时执行。
与您的解决scheme的不同之处在于脚本在用户login时运行,或者启动新的shell而不是在计算机启动时运行。 但我不得不承认,让任何用户在启动时运行脚本,我都不会感到无聊
你的build设听起来像一场噩梦的气质:)
只要给你的用户sudo根据需要访问现有的init脚本。
我会倾向于禁止脚本,并强制执行一个非常严格的简短列表,用户可以在简单的列表文件中引用的预设脚本和命令,这些列表文件可以在启动时轻松validation。 封装的脚本将被存储在一个普通的地方,而无需用户写入权限。 列表文件将命名脚本或命令以及所需的任何参数。 其中一个常用脚本将在用户login后为用户提供停止/启动/重新启动处理。
所有这些偏执的原因部分是由于安全性,而更多的是关于控制启动过程中发生的事情。 我的意思是你可以想象一下,如果你的用户因为可以同时启动各种各样的东西而被带走,那会是一个什么样的噩梦? 更不用说写得不好的脚本。
否则,如果你能find一个解决这些问题的现成解决scheme(这是你在问题中提到的一个标准),那就是要走的路。