起動時にアプリケーションを自動的に起動する方法


27

私はLinuxが初めてで、アプリケーションの起動を楽しみにしています(10秒ごとにLEDが切り替わります)。アプリケーションプログラムを作成しましたが、正常に動作していますが、ブート時に自動的に起動したいです。

このドキュメントは、起動スクリプトを/etc/init.dディレクトリにコピーし、rc.dディレクトリ内のコピーされたスクリプトへのシンボリックリンクを作成するように指示しています。

これらのスクリプトファイルの拡張子と名前は何ですか?シンボリックリンクを手動で追加することはできますか、rc.dそれとも特定の手順がありますか?

それを達成する方法はありますか?


初期化スクリプトをスタートアップに追加する好ましい方法は、ディストリビューションによって異なります。upstartとsystemdを支持して、それらを段階的に廃止するものさえいます。Debianのようなものがstart-stop-daemonより適切に処理するので、単に「&」をバックグラウンドに使用することはお勧めしません(ただし、プログラム自体がデーモン化することが望ましい)。どのディストリビューションを使用していますか?デスクトップMIMEタイプ以外では、* nixではファイル拡張子は無意味であり、実行可能ファイルにはファイル拡張子がないことが推奨されます。
ヨルダン

petalogixを使用している場合は、そのドキュメントに従ってください。特別な名前は必要ありません。やってみた?どのような問題がありますか?(そうでない場合は、ディストリビューションを指定して、何がうまくいかなかったかを説明してください。)
Mat

私はRPiにDebian「wheezy」を使用しています。
渓谷

1
10秒ごとに(つまり、10秒ではなく)行う必要がある場合は、cron代わりに使用することができます。
ペテルフ

@peterph:しかし、プログラムは10秒ごとに実行されるプログラムではなく、10秒ごとにLEDを切り替えるように聞こえます。
ゾーラワー

回答:


19

http://www.debian-administration.org/articles/28からの抜粋は、あなたの質問に答えているようです。

注:以下のスクリプト例では、「start)」セクションに呼び出しを追加して、実際にプログラムを起動します。システムを再起動せずにスクリプトの機能をテストできます。フルパスで呼び出して、パラメータに「start」または「stop」を指定します

ここに行く:

Debianは、システムのランレベルが変更された場合(ブートアップ時やシャットダウン時など)にコマンドを実行するために、initシステムのようなSys-Vを使用します。

マシンの起動時に開始する新しいサービスを追加する場合は、必要なスクリプトをディレクトリに追加する必要があります/etc/init.d/。そのディレクトリに既に存在するスクリプトの多くは、あなたができることの種類の例を提供します。

これは非常に単純なスクリプトで、2つの部分に分かれています。常に実行されるコードと、「start」または「stop」で呼び出されたときに実行されるコードです。

#! /bin/sh
# /etc/init.d/blah
#

# Some things that run always
touch /var/lock/blah

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting script blah "
    echo "Could do more here"
    ;;
  stop)
    echo "Stopping script blah"
    echo "Could do more here"
    ;;
  *)
    echo "Usage: /etc/init.d/blah {start|stop}"
    exit 1
    ;;
esac

exit 0

ファイルを正しい場所に保存したら、「chmod 755 /etc/init.d/blah」を実行して実行可能であることを確認します。

次に、適切なシンボリックリンクを追加して、システムがダウンまたは起動したときにスクリプトを実行する必要があります。

これを行う最も簡単な方法は、Debian固有のコマンドを使用することupdate-rc.dです:

root@skx:~# update-rc.d blah defaults
 Adding system startup for /etc/init.d/blah ...
   /etc/rc0.d/K20blah -> ../init.d/blah
   /etc/rc1.d/K20blah -> ../init.d/blah
   /etc/rc6.d/K20blah -> ../init.d/blah
   /etc/rc2.d/S20blah -> ../init.d/blah
   /etc/rc3.d/S20blah -> ../init.d/blah
   /etc/rc4.d/S20blah -> ../init.d/blah
   /etc/rc5.d/S20blah -> ../init.d/blah

このスクリプトをetc / init.d /に実際に配置する必要がありますか、それとも先頭の行#/etc/init.d/blahはシェルの場所を示していますか?
user137717

「コマンドが見つかりません:更新-rc.dの-SH」私は取得しています
m4l490n

2
新しいシステムはsystemd、ブートアップ構成を含む多くのことに使用します。を使用systemctlして制御および構成しますsystemd
アレクサンダーシュチェブリキン

4

最良の方法は、OpenSSHなどの通常のシステムサービスについて、ディストリビューションのパッケージソースを確認することです。良いプラクティスが何であるかがわかります。結局のところ、オープンソースの背後にある理由の1つは、ソースから学ぶことができるからです。


2
素晴らしいアドバイス!本当に賢明で関連性があり、すべてのDistoにチューニングされています。(また、質問の「Linuxの新機能」と「どうすればいいのか」という部分に答えます。この回答を使用して、開始停止スクリプトを改善します
。– Bruce0

3

スーパーバイザーを使用します。スーパーバイザーは、引数付きのスタートアップアプリケーションを管理および記録する効果的なプログラムです。詳細については、http://supervisord.org/running.htmlおよび(インストール手順に従ってください。

でconfファイルを作成します。/etc/supervisor/conf.d/{PROGRAM_NAME}.confここにコードがあります。

[program:{PROGRAM_NAME}]
command=/usr/bin/{PROGRAM_NAME} -arg1 -arg2
autostart=true  
autorestart=true  
stderr_logfile=/var/log/supervisor/{PROGRAM_NAME}.err.log  
stdout_logfile=/var/log/supervisor/{PROGRAM_NAME}.out.log  

次に、cmd行から実行します。

supervisorctl reload


あなたの答えは結構ですが、「supervisorctl reload」は
.conf

3

使用crontabははるかに簡単です。

crontab -eユーザーのcrontabを編集するために使用します。
最後に次の行を追加します。

@reboot <command>

例:

  • @reboot my_script.sh
  • @reboot python my_script.py arg1 arg2

最後にcrontab -l、スクリプトがリストに追加されたことを確認するために使用します。


この回答がなぜダウン票を受け取ったのだろうか?非常に単純なソリューションのようで、crontabを使用するもののようです。
kolinko

1

Linux サポートの 新しいバージョンsystemd(@AlexanderShcheblikinが述べたように)。より多くの機能があり、debian固有のソリューションよりも移植性があります。

この本当に素晴らしいガイドを読んでください

必要最小限のクイックリファレンスを次に示します。

  1. myscript.sh実行可能権限を持つスクリプト(例)。
  2. スクリプトを実行するためのコマンドを含む、644許可をmyservice.service持つ「.service」拡張子を/etc/systemd/system持つユニットファイル(例:)。例えば、

[Unit]
Description=Example systemd service.

[Service]
Type=simple
ExecStart=/bin/bash /path/to/myscript.sh

[Install]
WantedBy=multi-user.target
  1. コマンドsudo systemctl enable myserviceを実行して、起動時に起動できるようにします。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.