我有一个在启动时启动的监视UPS的服务。 每次用户login时,我都需要显示一个对话框,说明UPS已连接,断开连接等。当用户login并显示对话框时,我的应用程序可以知道这种方式吗?
应用程序必须在login屏幕上运行,以防UPS掉线并且系统需要closures。 加上根权限是必需的,所以它不能只是在用户的启动脚本中运行。
系统中的每个用户都需要获取对话框,因此添加用户的configuration文件并不是一件简单的事情。
感谢您的任何帮助,您可以提供。
如果你使用solaris而不是设置suid,你可能会考虑创build一个rbacconfiguration文件,允许用户使用uid 0来执行这个ups status命令,并将其保存在系统和/或默认configuration文件中。
一些东西:
首先, /etc/profile将被用于几乎每个loginshell。 其次,SUID位用于确保程序始终以特定用户身份运行(例如root)。 因此,如果您希望让应用程序以root用户身份login到每个用户,则应确保该应用程序由root拥有,请运行chmod u+s /the/app并将其添加到/ etc / profile。
第三,你可能想做的就是让服务在启动时以root身份运行,然后使用syslog()将这些消息logging在emerg级别,默认情况下这些消息将被广播给每个用户。 如果在login时UPS状态发生变化,这将提醒已经login的用户。
那么 – 如果用户将UPS报告为脱机,是否要求用户使用脚本closures机器?
另一种方法可能是创build一个CRON工作,在任何时间间隔内每隔半小时轮询一次UPS,并在必要时closuresUPS。 还有一些守护进程会监视来自UPS的实时消息,并作出相应的反应 – 例如发送电子邮件给系统pipe理员,警告用户,并正常closures系统。
Linux UPS守护进程: http : //linux.die.net/man/8/upsd
Solaris UPS工具: http : //blogs.oracle.com/mikey/entry/network_ups_tools_on_solaris
后者解释了用户通知和关机。