Ubuntuの起動時にアプリケーションを自動的に実行する必要があります。ターミナルを開かずにこのアプリを実行しています。ただし、このアプリケーションは一部の情報を端末ウィンドウに表示するため、gnome-terminalを開いた後(自動的に)厳密に実行する必要があります。そのために、説明されているようにinit.dにスクリプトファイルを作成しようとしました here 。スクリプトの内容は次のとおりです。
#!/bin/bash
cd /home/mediambient/programa
/usr/bin/gnome-terminal -e ./driver &
これは、ファイルを実行しても機能しますが、コンピューターを再起動しても何も実行されないようです。誰が私が間違っているのか教えてもらえますか?
前もって感謝します。
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 logsはlogrotate
でローテーションされますが、Ubuntuの現在のデフォルト設定では、crontabからdirectlyと呼ばれないことに注意してください。
logrotate
を使用したログローテーションとcron
を使用したタスクスケジューリングの概要は、開始するのに役立ちますが、これらのトピックについてAskUbuntuで詳細な質問をするか、必要に応じてここにコメントするか、質問を編集して詳細を提供してくださいあなたがしたい(それから私はそれを行う方法についてより詳細な説明を与えることができるかもしれません)。
これが書かれています:
/usr/bin/gnome-terminal -e ./driver &
行の最後にある&パラメーターは、プログラムが非表示になることを意味します。これは、起動音のWebサーバーのようなバックグラウンドアプリを実行するのに便利ですが、使用する場合は使用しないでください。解決策は削除するのと同じくらい簡単です:
/usr/bin/gnome-terminal -e ./driver
そして、自動起動にGNOMEを使用していないことがわかりました。サーバーの命令の代わりにこの命令を使用します(google-chromeを上記のコマンドに置き換えてください!): buntuでのChrome自動起動