web-dev-qa-db-ja.com

起動時にgnome-terminalでアプリケーションを自動的に実行するにはどうすればよいですか?

Ubuntuの起動時にアプリケーションを自動的に実行する必要があります。ターミナルを開かずにこのアプリを実行しています。ただし、このアプリケーションは一部の情報を端末ウィンドウに表示するため、gnome-terminalを開いた後(自動的に)厳密に実行する必要があります。そのために、説明されているようにinit.dにスクリプトファイルを作成しようとしました here 。スクリプトの内容は次のとおりです。

#!/bin/bash
cd /home/mediambient/programa 
/usr/bin/gnome-terminal -e ./driver &

これは、ファイルを実行しても機能しますが、コンピューターを再起動しても何も実行されないようです。誰が私が間違っているのか教えてもらえますか?

前もって感謝します。

5
koco

init.dのスクリプトは、ログインセッションが表示される前に実行されるため、gnome-terminalから実行してinit.dウィンドウを表示するスクリプトを作成することはできません。グラフィカルユーザーインターフェイスが実行される前でも実行されます。

代わりにファイルに記録する

マシンの起動時にこのスクリプトを実行する必要がある場合は、テキストを自動的に表示するのではなく、ログファイルに出力を書き込む必要があります。通常の出力とログファイルへのエラー出力の両方を実行するには、次のようにスクリプトを作成します。

#!/bin/bash
cd /home/mediambient/programa
./driver &>> logfile

logfileを使用するログファイルの名前に置き換えます。そのファイルを/home/mediambient/programaフォルダーに置くか、システムログファイル用のフォルダー(/var/log)に置くことができます。それはあなたの選択です。 &>>演算子は、ログファイルの最後に出力を追加することに注意してください。毎回ログファイルを上書きする場合は、代わりに&>演算子を使用する必要があります。

rootユーザーとしての初期化スクリプトからのコマンドの実行

また、init.dのスクリプトはrootとして実行されることに注意してください。そうしたくないが、代わりにprogramaをユーザーmediambientとして実行したい場合は、次のようにスクリプトを記述できます。

#!/bin/bash
cd /home/mediambient/programa
Sudo -u mediambient ./driver &>> logfile

これにより、プログラムはmediambientとして実行されますが、ログファイルは引き続きrootとして記録されます。ログファイルをmediambientとして記録する場合(mediambientのホームフォルダー内に配置する場合はおそらく実行する必要があります)、次を使用できます。

#!/bin/bash
cd /home/mediambient/programa
Sudo -u mediambient ./driver 2>&1 | Sudo -u mediambient tee logfile > /dev/null

(正確にどのように機能するかに興味がある場合は、 これは2>&1を説明します および これはteeを説明します

(ところで、このスクリプトでは特にbashを必要としないことに注意してください。これは優れたインタラクティブなシェルですが、initおよびバックグラウンドスクリプトに使用するには少しリソースを消費します。 dashであり、これははるかに軽量です。#!/bin/shの代わりに#!/bin/bashを使用する場合、POSIXスタイルのシェルスクリプトの実行にOSの優先シェルを使用します。このスクリプトでは、それほど重要ではありませんが、取得するのは良い習慣ですに。)

ユーザーがブート時ではなくグラフィカルにログオンしたときにスクリプトを実行する

または、ユーザーがmediambientをグラフィカルにログオンしたときに(コンピューターの起動時ではなく)スクリプトを実行することが本当に必要な場合は、gnome-terminalウィンドウでdriverを実行することができます。これにはinit.dを使用できません。代わりに、デスクトップ環境が提供する機能を使用する必要があります。

GNOMEベースのUbuntu(Unity、Unity 2D、GNOME Classic/Fallback、またはGNOME Shellをデスクトップ環境として使用)を実行している場合は、gnome-terminalで出力を表示したいので、そうだと思いますを押すことでこれを行うことができます Alt+ F2およびgnome-session-propertiesの実行。これにより、スタートアップアプリケーションを編集できます。 Command:フィールドに次を入力します。

gnome-terminal --working-directory=/home/mediambient/programa -e ./driver

起動時にスクリプトを実行し、ファイルにログを記録し、ユーザーがグラフィカルにログオンしたときにログを自動的に表示する

または、スクリプトをinit.dに入れてUbuntuの最初の起動時に実行し、次にmediambientがグラフィカルにログインすると、進行中の出力を示すgnome-terminalウィンドウを自動的に生成することにより、両方の世界の(ある種)を取得できます。これを行うには、次のコマンドでスタートアップアプリケーションにエントリを追加します。

gnome-terminal --working-directory=/home/mediambient/programa -x tail -n 512 -f logfile

(またはlogfileがログファイルへの相対パスではなく絶対パスである場合は、--working-directory=/home/mediambient/programaを省略できます。)

-n 512は、ログファイルの表示を開始する前から最大512行のログファイルを表示することを意味します。 (ログファイルに追加されるたびに各行が表示されます。)これは、gnome-terminalウィンドウがデフォルトで最大512行しか記憶しないため、通常は妥当な選択です。 512行以上を記憶する変更されたプロファイルでgnome-terminalを実行する場合、それに応じてtailコマンドを編集できます。

ログファイルのサイズを制限する

ログファイルのサイズの増大を懸念している場合、最初に行うことは、これが実際に問題になる可能性があるかどうかを把握することです。推定できるかもしれません。ログファイルが1秒あたり1行ずつ増加し(ほとんどのログファイルよりもはるかに高速)、各行の長さが80文字であるとします。次に、 1か月で、ファイルのサイズはわずか200 MB です。 1年で約2.5 GBに成長します。 数百メガバイトはおそらく問題ありませんが、複数ギガバイトはおそらくそうではないので、問題は、ログファイルを手動で編集してクリアできるようにすることです。少なくとも数ヶ月ごとに?

1分あたり1行に近い場合、ファイルは 年間50 MB未満 の割合で増加します。この場合、おそらくファイルの消去について心配する必要はありません。

ファイルを消去するには、2つの簡単な方法があります。編集して、その一部(またはすべて)を削除できます。または、削除して再度作成することもできます。削除すると、アクセスするものがなくなるまでディスク上のスペースを占有し続けるため、driverの再起動が必要になる場合があります。また、tailを再起動する必要がありますが、ファイルを開いたままにしない修正済みのtailコマンドを使用して、この問題を修正できます。

gnome-terminal --working-directory=/home/mediambient/programa -x tail -n 512 --follow=name logfile

-f--follow=nameに置き換えました。)

成長するログファイルをより高度に、または自動的に管理するには、 logrotateコマンド を使用できます。 logrotateコマンドは、ログファイルが最大サイズまたは経過時間を超えているかどうかを確認し、「回転」させて番号付きアーカイブ(最終的には削除されます)に圧縮し、新しいログファイルを作成します。 logrotateは、ログに関するメールを送信するように設定していれば、そのメールについても送信します。 logrotateマニュアルページ は、設定ファイルを作成して、どのログを処理するかをlogrotateに伝える方法を説明しています。

logrotateのユーザーcrontabからmediambientを自動的に実行できます。 (crontabは、 cronデーモン によって定期的なスケジュールで実行されるタスクをリストします。) crontabコマンド は、ユーザーcrontabをインストールして操作します。または、システムcrontab、/etc/crontabにエントリを追加できます(init.dでスクリプトを実行し、driverとしてではなく、rootとしてmediambientを実行する場合、これは妥当な選択です)。 Ubuntuのsystem logslogrotateでローテーションされますが、Ubuntuの現在のデフォルト設定では、crontabからdirectlyと呼ばれないことに注意してください。

logrotateを使用したログローテーションとcronを使用したタスクスケジューリングの概要は、開始するのに役立ちますが、これらのトピックについてAskUbuntuで詳細な質問をするか、必要に応じてここにコメントするか、質問を編集して詳細を提供してくださいあなたがしたい(それから私はそれを行う方法についてより詳細な説明を与えることができるかもしれません)。

8
Eliah Kagan

これが書かれています:

/usr/bin/gnome-terminal -e ./driver &

行の最後にある&パラメーターは、プログラムが非表示になることを意味します。これは、起動音のWebサーバーのようなバックグラウンドアプリを実行するのに便利ですが、使用する場合は使用しないでください。解決策は削除するのと同じくらい簡単です:

/usr/bin/gnome-terminal -e ./driver

そして、自動起動にGNOMEを使用していないことがわかりました。サーバーの命令の代わりにこの命令を使用します(google-chromeを上記のコマンドに置き換えてください!): buntuでのChrome自動起動

0
Xerz