起動時にスクリプトを実行する


189

Raspberry Piの起動時にスクリプトを実行しようとしています。Webブラウザを自動的に開きたいです。

単純な解決策を見つけようとしました(スクリプトを「スタートアップ」ディレクトリなどにドロップします)が、そのようなものは見当たりません。

Upstartを調べましたが、それがどのように機能するかを把握するのに苦労しています。私が試したスクリプトは、テストしても機能しませんでした。


4
どのオペレーティングシステムを実行していますか?Piで使用しているFreeBSDでは、起動スクリプトを/usr/local/etc/rc.d/に追加するか、/ etc / rc.localに追加するだけです。Linuxディストリビューションごとに推奨される方法は異なります。Xを実行している場合は、あなたの.xinitrcor .xsessionファイルへの追加を検討する必要があります。
ゴティ

X起動プロセスの詳細については、こちらをご覧ください
ゴティ

6
ここで受け入れられた答えにはいくつかの注意事項があり、特定の条件を除き、技術的に起動時に何も開始しないことに注意してください。注意深く読んでください。
goldilocks

piの起動時や起動時ではなく、ログイン時に実行されるスクリプトを要求しています。2つの非常に異なるもので、タイトルはGoogle検索結果を歪めています。
IAmNaN

回答:


197

スタートアップでMidoriを実行するには、このチュートリアルをご覧ください。DIYソリューションについては、続きをお読みください。


あなたはの底にスクリプト実行コマンドを追加することができ.bashrcますそのスクリプトたびにターミナルを開く(またはの新しいインスタンスを実行を実行しますbash

  1. piフォルダー内にいることを確認します。

    $ cd ~
    
  2. ファイルを作成し、そのファイルで実行するスクリプトを作成します。

    $ sudo nano superscript
    
  3. 保存して終了:Ctrl+ XYEnter

  4. .bashrc設定のために開きます:

.bashrcスクリプトを実行するためのものではありません

非ログインの対話型シェルが起動されるたびに実行され、シェルの構成に使用されます。
~/.bashrc: executed by bash(1) for non-login shells

   $ sudo nano .bashrc
  1. 下にスクロールして、次の行を追加します。 ./superscript

  2. 保存して終了:Ctrl+ XYEnter


コンソールの起動時に機能するソリューションをお探しの場合は、このリンクをご覧ください。基本的な要約:

  1. スタートアップスクリプト用のファイルを作成し、ファイルにスクリプトを記述します。

    $ sudo nano /etc/init.d/superscript
    
  2. 保存して終了:Ctrl+ XYEnter

  3. スクリプトを実行可能にします。

    $ sudo chmod 755 /etc/init.d/superscript
    
  4. 起動時に実行するスクリプトを登録します。

    $ sudo update-rc.d superscript defaults
    

LXDE環境を起動するときにスクリプトを実行したい場合は、このRaspberry Piフォーラムの投稿をご覧ください

  1. 案内する ~/.config/lxsession/LXDE-pi

  2. autostartそのフォルダー内のファイルを開きます。

    $ sudo nano autostart
    
  3. @midori新しい行を追加します。pythonスクリプトのようなものを実行したい場合@python mypython.pyは、新しい行に何かを入れてください。スクリプトファイルの実行はになります@./superscriptが、何らかの理由でスクリプトが無限ループで実行されます(おそらくこれで停止します)。

  4. 保存して終了:Ctrl+ XYEnter

  5. Raspberry PiをLXDE環境で再起動します。


スタートアップでのMidoriのセットアップに関するチュートリアルは、まさに私が探していたものでした。なぜそんなに簡単なことをするのに多くの方法があるのか​​定かではありませんが、私はそれが今働いていることを嬉しく思います。
タイラーマリー

1
@ syb0rg ssh経由でログインした場合、ログイン部分での実行はチャーム(+1)のように機能しますが、lxdeデスクトップセッションの開始時は機能しません。それを行う方法はありますか?
ジョージ・プロフェンツァ

@GeorgeProfenzaあなたがするとき$ sudo startx
syb0rg

2
pyhtonスクリプトが実行されることを指摘したかっただけですが、エラーがある場合は、/ etc / xdg / lxsession / LXDE / autostartメソッドを使用してバックグラウンドのどこかになります。.barshrcを使用するとエラーも明らかになりますが、最初はスクリプトがタイトであることを確認することが非常に重要です(難しいことがわかりました:))
ジョージプロフェンザ

7
.bashrcシステムの起動時またはユーザーのログイン時に読み取られるのではなく、新しい端末を開くときにのみ読み取られます(ユーザーが新しい端末を開くたびに読み取られます)。私はこの答えが非常に多くの賛成票を得たことに当惑しています:最初の部分は明らかに間違っています。3番目の部分は、GUIプログラムを実行するのに適切です。
ジル

46

私がほとんどの人がそれを実行し(Raspberry Piフォーラムをご覧ください)、成功して自分自身を実行した方法はを使用してい/etc/rc.localます。

ここで必要なの./myscriptは、rc.localテキストファイルに入れることだけです。Pythonの場合は、を入れpython myscript.pyます。

これは文字通り「シンプルなソリューション(「スクリプト」を「スタートアップ」ディレクトリなどにドロップするなど)」です。質問がある場合はフォーラムで検索してください。このソリューションは、 Google検索!


4
参考までに、rc.localには、デフォルトではスクリプトが何もせず、実行可能なビットを変更する必要があるというさまざまなコメントがあります。これは、出口0の前にスクリプトのコマンドを入力するだけでは正しくありません。起動時に実行されます。スクリプトがバックグラウンドで実行を終了することを確認してください。終了すると、ログインプロンプトがブロックされます。はい、それは私がやったことです。
ロブ14年


@robスクリプトを実行可能として設定することを提案しているのですか?これは、コマンドでスクリプトを実行することにより、質問で軽減されpython myscript.pyます。あなたは+ Xそれをchmodコマンドと追加したい場合は#! /bin/python、あなたがやってスクリプトを実行できる$pathtofile/myscript.py場所$pathtofileである.あなたが同じディレクトリやファイルへの絶対パスまたは相対パスにしています。
JFA

1
これは、ブラウザなどのGUIプログラムには適していません。/etc/rc.localシステムサービス(ユーザーインターフェイスを持たないプログラム)を開始するだけです。
ジル

1
@ ErickM.Sprengelこのスレッドのように、このスレッドで正しい答えの1つを使用してください。
ジル

32

crontabに追加します

crontabは、定義された時間にコマンドを実行します。


ファイルを編集します。

sudo crontab -e

ファイルに行を追加します(ここではpythonスクリプト):

@reboot python3 /home/pi/Desktop/exemple.py &

2
ここで少し細かく言うと、技術的にはコマンドを実行するのはcrontabではなく、とにかくです。追加するリストされたラインに関しては、コマンドのための完全なパスを置くことをお勧めします(この場合は完全なパスにここで定義されたpython3)を参照してくださいここに
Ghanima

これは、その単純さのために私がいつも使用している方法です。+1
パトリッククック

これは、ブラウザなどのGUIプログラムには適していません。/etc/rc.localユーザーインターフェイスを持たないプログラムを起動するだけです。
ジル

2
rc.localやinit.dなど、さまざまなもので動作するようにかなりの時間を費やした後、すぐに動作しました!どうもありがとう!
ピョートルクラ

4
これは、RPI OSで何らかの理由で機能しません
デニス

11

Xorgアプリの自動起動

開始したいスクリプトがxorgセッションを必要とする場合、使用しているデスクトップ環境に応じて動作する場合と動作しない場合があるfreedesktop autostart仕様に従うことをお勧めします。

または、https://wiki.archlinux.org/index.php/autostartingで説明されているように、特定のデスクトップ環境をターゲットにすることができます

systemdサービスとしてスクリプトを実行する

スクリプトがデーモンまたは「サービス」の説明に適合し、システムがsystemdを実行ている場合(raspbianおよび最新のlinucesの場合)、systemdサービスとして実行するようにスクリプトを構成できます。ライフサイクルと実行環境、およびネットワークが稼働しているなど、スクリプトを(再)開始するための前提条件。障害が発生した場合のサービスの再起動を構成することもできます(Restart=always、および再起動間の遅延などRestartSec=10)。

システム全体で使用する場合は/etc/systemd/system、たとえば、vim /etc/systemd/system/autossh.service次のようにsystemdユニットファイルを作成します。

[Unit]
Description=Autossh keepalive daemon
## make sure we only start the service after network is up
Wants=network-online.target
After=network.target

[Service]
## use 'Type=forking' if the service backgrounds itself
## other values are Type=simple (default) and Type=oneshot
Type=forking
## here we can set custom environment variables
Environment=AUTOSSH_GATETIME=0
Environment=AUTOSSH_PORT=0
ExecStart=/usr/local/bin/ssh-keep-alive.sh
ExecStop=/usr/bin/killall -9 autossh
### NOTE: you can have multiple `ExecStop` lines
ExecStop=/usr/bin/killall ssh
# don't use 'nobody' if your script needs to access user files
# (if User is not set the service will run as root)
#User=nobody

# Useful during debugging; remove it once the service is working
StandardOutput=console

[Install]
WantedBy=multi-user.target

こちらもご覧ください:

これで、サービスをテストする準備ができました。

systemctl start autossh

サービスのステータスの確認:

systemctl status autossh

サービスの停止:

systemctl stop autossh

サービスが期待どおりに機能することを確認したら、次を使用して有効にします。

systemctl enable autossh

注:セキュリティ上の理由systemdから、crontabスクリプトの実行方法と同様に、制限された環境でスクリプトを実行します。したがって、既存のシステム変数に関する仮定を行わないでください。Environmentスクリプトで特定の変数を定義する必要がある場合は、キーを使用します。set -xbashスクリプトの先頭に追加して実行systemctl status my_serviceすると、スクリプトが失敗する理由を特定するのに役立つ場合があります。Tumbのルールとして、echoとを含むすべてのものに対して常に絶対パスを使用catするか、$ PATHを明示的に定義します。


7

これは古い質問ですが、一般的に簡単なことを行うように求められていますが、私は2セントを投入したいと思います-自動起動。この質問に対するすべての回答で提案されたすべての解決策を試しました。それらのどれも私のために働いた。RaspbianでRaspberry PI Model 2を使用しています。

アプリケーションを正常に自動起動させる唯一の方法は、次のようなスクリプトを使用することです。間違った作業パスで開始するなどの問題が発生することなく、アプリケーションが期待どおりに開始されたため、成功しました。

1.拡張子が.shの空のファイルを作成し、任意の名前を付けます。

2.「アプリケーション名」を作成したスクリプト名に変更することを除いて、以下を正確にコピーして貼り付けます。

 #! /bin/sh

 ### BEGIN INIT INFO
 # Provides:          noip
 # Required-Start:    $remote_fs $syslog
 # Required-Stop:     $remote_fs $syslog
 # Default-Start:     2 3 4 5
 # Default-Stop:      0 1 6
 # Short-Description: Simple script to start a program at boot
 ### END INIT INFO

 #change /direct/path/to/your/application to the path your application is in.
 cd /direct/path/to/your/application      # example cd /home/pi/myprogram/

 #change YourProgramExactName to Exact name of your program that you want to auto start
 ./YourProgramExactName

 exit 0 
  1. 次に、アプリケーションフォルダー内にスクリプトファイルを保存します

  2. 次に、/home/pi/.config/autostartフォルダーを開きます。あなたの場合は違うかもしれません。ホームフォルダーを開き、非表示フォルダーの表示を有効にするだけです。開き.config/autostartます。自動起動フォルダーが表示されない場合は、.configフォルダー内に自動起動というフォルダーを作成します。

  3. 自動起動フォルダー内で、次のように作成したスクリプトファイルへのショートカットを作成する必要があります。拡張子が空のファイルを作成します.desktop

  4. コピーして変更する必要がありますを除いて、空のデスクトップファイルに以下を貼り付けCommentNameExecPathおよびIconフィールドの値。

    [Desktop Entry]
    Comment=
    Exec=/path/to/Your/application/Name-of-the-script-file (.sh)
    Icon=/Path/to/Your/application/Icon/IconName
    Name=YourApplicationEXACTNAME
    Path=/Path/to/Your/Application-ONLY
    Type=Application
    
  5. 必要なすべてのフィールドを変更した後、ファイルを保存して閉じます。できました。試してみてください。

    • 注:これにより、スクリプトがDebian LSBInitに準拠します:https ://wiki.debian.org/LSBInitScripts

技術的には、このスクリプトは特定のユーザーではなくシステムによって実行されます。したがって、おそらくアプリケーション/usr/local/bin/ApplicationName...に属しているほうがよいでしょうか?
SlySven

@SlySven「システム」は特定のユーザーです。
限定償い

ルート(UID = 0)またはpiユーザー(UID〜500または1000 IIRC)として実行されますか-ルートまたは別のシステム UID(500未満)として実行される場合、従来はスクリプトファイルを保存することをお勧めします(または、それが依存するもの)がルートデバイスに依存しているため、他のデバイス(たとえばhome、別のデバイス)に問題がある場合、スクリプト(または実行可能ファイル)が利用できない場合に問題は発生しません。システムはシングルユーザー/bin/shシェルにフェールバックします!昨今systemdの方法は、両方をマウントすることです/し、/usrPID 1の前に...開始された
SlySven

5

これにも問題がありました。Raspbianを実行しているRaspberry Pi3では、これが私がやったことです:

  1. ルートディレクトリにスタートアップシェルスクリプトを作成します(「launch」という名前を付けました)。

sudo leafpad launch.sh

  1. ファイルを保存する
  2. LXDE-pi自動起動ファイルを編集します

sudo leafpad /home/pi/.config/lxsession/LXDE-pi/autostart

  1. これをそのファイルの最後に追加します

./launch.sh

  1. リブート

3

Raspbian Stretchを実行しているRaspberry Pi3では、これが私がやったことです:

LXDE-pi自動起動ファイルを編集します

    sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart

これをそのファイルの最後に追加します

    @sudo python3 /path/to/your/script.py

保存して再起動


1

方法1:

ログイン時にコマンドを自動的に起動するには、コマンドを次の名前のファイルに入れます

.bashrc

ユーザーディレクトリ(たとえば、/ home / pi)

.bashrcスクリプトを実行するためのものではありません

非ログインの対話型シェルが起動されるたびに実行され、シェルの構成に使用されます。
~/.bashrc: executed by bash(1) for non-login shells

たとえば、ファイルには

chromium-browser --kiosk www.google.com

www.google.comを指すフルスクリーンでChromiumを起動する


方法2:

このソリューションは本当にうまく機能します。ブラウザがロードされると、画面の左上に一般的なバグのように見える小さな黒い四角があります(他の人によってフォーラムで言及されています)が、それ以外の場合、フルスクリーンモードはブラウザページ以外をすべて非表示にします。

自動起動ファイルを編集します。

sudo nano /etc/xdg/lxsession/LXDE/autostart 

各行の先頭に「#」を使用してすべてをコメントアウトし、次の行を追加します

ブラウザを自動実行する

@xset s off
@xset -dpms
@xset s noblank
@midori -e Fullscreen -a http://google.com

必要に応じて、構成ツールを使用して、電源投入時にGUIの自動実行を有効にします

sudo raspi-config

終了してコマンドプロンプトに戻る必要がある場合 CTRL+ ALT+F1

CTRL+ ALT+F2


0

スクリプトを/etc/profileファイルの最後に配置できます。

他のオプションは機能しませんでしたが、これはおそらくスクリプトをデスクトップに配置したためです。


0

コマンド「python /path/to/your/script.py」で.shファイルを作成し、「sudo nano /etc/rc.local」と入力して、.shファイルへのパスを入力します

exit 0

または、単に入力することもできます

crontab -e

または

sudo crontab -e 

起動時にスクリプトを実行する場合

ファイルタイプ内

@reboot python /path/to/your/script.py &

2
crontabエントリには絶対パスを使用することを強くお勧めします!
ガニマ

-2

それは動作します。 (再起動するたびに、次のサブミッションが自動的に準備されます)

$ cat /etc/rc.local
#!/bin/sh -e
echo "18" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio18/direction
echo "1" > /sys/class/gpio/gpio18/value
exit 0

-2

これは私が一般的に行うことです。

  1. ファイルをraspberry piホームディレクトリに保存します。例:mycode.py
  2. ファイルを編集します。

    sudo nano .bashrc

.bashrcスクリプトを実行するためのものではありません

非ログインの対話型シェルが起動されるたびに実行され、シェルの構成に使用されます。
~/.bashrc: executed by bash(1) for non-login shells

  1. ファイルの最後に移動して、次のように記述します。

    sudo python mycode.py

  2. 出力をtxtファイルに保存する場合は、手順3のコードを次のように編集します。

    sudo python mycode.py >> output.py

お役に立てれば!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.