現在 Arch Linux ARM ディストリビューションを実行している Olinuxino Maxi ボードで実行するアプリケーションを作成しました。私のやや単純なアプリケーションは、次の 2 つの部分に分かれていると考えることができます。
RS232 と TCP/IP 間の通信を実行し、Linphone ライブラリを介して VOIP 通話を開始/受信するプログラム。このプログラムがどのように動作するかは、
.confファイルを介して構成されます。このプログラムは、起動時に起動します。.serviceファイルを作成し、systemctl/を使用して有効にすることで、起動ブートを実現しましたsystemd。Lighttpd 経由でアクセスされる単純な Web ページ。CGI ページは C で書かれています。このページは、ユーザーが
.conf簡単なフォームでファイルを編集する手段を提供し、メイン プログラムの動作を構成します。
上記のすべてが機能するようになりました。.conf私が抱えている特定の問題は、ユーザーが Web ページを介して新しい設定を送信したときに、サービス プログラムを再起動する (ファイルから再構成する) 方法に関連しています。私はかなり経験豊富な C プログラマーですが、Linux での開発と一般的な Linux 管理は、私にとってかなり新しい分野であるため、この分野で立ち往生しています。
関連する場合は、ユーザーの設定方法などを含め、これをどのように設定したかについて少し説明します。
- アプリケーションの名前の新しいユーザーを設定しました。ユーザーapplication-nameと呼びます。
- RS232/TCP/IP/VOIP プログラムはフォルダにあります
/home/application-name/。.confファイルもここにあります。 systemd起動時にプログラムを開始します。プログラムがルートとして実行されていることを理解しています。- Web/CGI コードは にあり
/home/application-name/web/ます。Lighttpd 構成でエイリアスを設定しました。これは/cgi-bin/ここを指し、機能します。 - 私が理解している Lighttpd サーバーは、ユーザー「http」として実行され、Web ページに喜んでアクセスし、POST データの送信時に、
../.confそれに応じてファイルを編集します。.confWeb サーバーがファイルを編集できるようにするには、chmodそのファイルに他のユーザーへの書き込みアクセスを許可する必要がありましたが、これを行うためのより良い方法は、ユーザーを新しいユーザー グループに入れることapplication-nameだhttpと思います (ありがたいのですが)これについてもアドバイス)。 - POST データの処理後、私の C CGI プログラムは
system()、bash スクリプトを呼び出すためにも使用しますrestart_application.sh。 - 内で、メイン プログラムを再起動するために を
restart_application.sh呼び出しています。しかし、systemctlそれは機能しませんroot..systemctl
したがって、主な質問は次のとおりです。
- プログラムを再起動するにはどうすればよいですか?
また:
- セットアップと Linux システム管理に関して、ここで絶対に恐ろしいことをしている場合は、ぜひ怒って叫んでください。
編集1:誰もがより良いアプローチを持っていない限り、基本的にbashファイル内で「sudo」するというここで提案されたアイデアを試してみることを考えています。