如何重启Lighttpd CGI命令触发的服务或重启?

时间:2013-10-02 15:20:02

标签: c linux arm lighttpd systemd

我创建了一个在Olinuxino Maxi板上运行的应用程序,该板目前运行Arch Linux ARM发行版。我的一些简单的应用程序可以被认为分为两部分:

  • 在RS232和TCP / IP之间执行通信,并通过Linphone库启动/接受VOIP呼叫的程序。该程序的行为方式是通过.conf文件配置的。该程序在启动时启动。我通过为其创建.service文件然后使用systemctl / systemd启用它来实现启动启动。

  • 通过Lighttpd访问的简单网页。 CGI页面用C语言编写。该页面为用户提供了通过简单形式编辑.conf文件的方法,从而配置主程序的操作。

以上所有现在都有效。我遇到的具体问题涉及当用户通过网页提交新设置时,如何使我的服务程序重新启动(以便它再次从.conf文件配置)。我坚持这个领域是因为,虽然我是一位经验丰富的C程序员,但在Linux上进行开发和一般的Linux管理对我来说是一个相当新的领域。

如果它是相关的,我会讨论一下我如何设置它,包括我如何设置用户等等:

  • 我已经设置了一个应用程序名称的新用户。将其命名为user application-name
  • RS232 / TCP / IP / VOIP程序位于文件夹/home/application-name/中。 .conf文件也位于此处。
  • systemd在启动时启动程序。我知道该程序是以root身份运行的。
  • 网络/ CGI代码位于/home/application-name/web/。我在Lighttpd配置中设置了一个别名,/cgi-bin/指向此处,这是有效的。
  • 我理解Lighttpd服务器以用户'http'运行,很高兴访问网页,在提交POST数据时,相应地编辑../.conf文件。为了允许Web服务器编辑.conf文件,我必须chmod该文件允许对其他人进行写访问,但我猜测更好的方法是将用户放入application-name 1}}和http成为一个新的用户组(虽然我也很欣赏这方面的建议)。
  • 处理完POST数据后,我的C CGI程序还使用system()来调用bash脚本restart_application.sh
  • restart_application.sh内,我正在拨打systemctl来重启我的主程序。但它不起作用,我收集它不起作用,因为除root之外的任何用户都不能调用systemctl

所以主要的问题是:

  • 我应该如何重新启动程序?

还有:

  • 如果我在设置和Linux系统管理方面做了任何绝对的恐怖,请一定要愤怒地喊道。

编辑1 :除非有人有更好的方法,否则我正在考虑尝试建议here这个在bash文件中基本上是'sudo'的想法。

0 个答案:

没有答案