我创建了一个在 Olinuxino Maxi 板上运行的应用程序,该板目前正在运行 Arch Linux ARM 发行版。我有点简单的应用程序可以被认为是分为两部分:
一个在 RS232 和 TCP/IP 之间执行通信,并通过 Linphone 库发起/接受 VOIP 呼叫的程序。该程序的行为方式是通过
.conf
文件配置的。该程序在启动时启动。.service
我通过为它创建一个文件然后使用systemctl
/启用它来实现启动引导systemd
。通过 Lighttpd 访问的简单网页。CGI页面是用C语言编写的。该页面为用户提供了
.conf
通过简单的表单编辑文件的方式,从而配置主程序的操作。
以上所有现在都有效。.conf
我遇到的具体问题与当用户通过网页提交新设置时如何使我的服务程序重新启动(以便它从文件中重新配置自身)有关。我被困在这个领域是因为,虽然我是一个相当有经验的 C 程序员,但在 Linux 上进行开发和一般的 Linux 管理对我来说是相当新的领域。
如果相关,我将讨论一下我是如何设置的,包括我如何设置用户等等:
- 我已经设置了应用程序名称的新用户。称它为用户应用程序名称。
- RS232/TCP/IP/VOIP 程序位于文件夹中
/home/application-name/
。该.conf
文件也位于此处。 systemd
在启动时启动程序。我了解该程序是以 root 身份运行的。- Web/CGI 代码位于
/home/application-name/web/
. 我在 Lighttpd 配置中设置了一个别名,它/cgi-bin/
指向这里,并且有效。 - 我理解的 Lighttpd 服务器以用户“http”身份运行,它愉快地访问网页,并在提交 POST 数据时
../.conf
相应地编辑文件。为了允许 Web 服务器编辑该.conf
文件,我确实必须chmod
对该文件允许对其他人进行写访问,但我猜测这样做的更好方法是将用户application-name
放入http
一个新用户组(尽管我会很感激对此也有建议)。 - 在处理完 POST 数据后,我的 C CGI 程序还用于
system()
调用 bash 脚本,restart_application.sh
. - 在里面
restart_application.sh
,我正在调用以systemctl
重新启动我的主程序。但它不起作用,我认为它不起作用,因为除了可以调用之外没有用户root
可以调用systemctl
.
所以主要问题是:
- 我应该如何让我的程序重新启动?
并且:
- 如果我在我的设置和 Linux 系统管理方面做任何绝对恐怖的事情,请务必愤怒地大喊。
编辑 1:除非有人有更好的方法,否则我正在考虑尝试这里建议的想法,即在 bash 文件中基本上是“sudo”。