web-dev-qa-db-ja.com

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

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

ドキュメント here は、スタートアップスクリプトを/etc/init.dディレクトリにコピーし、コピーしたスクリプトへのシンボリックリンクをrc.dディレクトリに作成することを示しています。

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

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

28
gorge

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

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

ここに行く:

Debianは、システムのランレベルが変更されたとき(たとえば、起動時とシャットダウン時)にコマンドを実行するためにinitシステムのようなSys-Vを使用します。

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

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

#! /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
19

crontabの方がはるかに簡単です。

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

@reboot <command>

例:

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

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

たとえば、次の1つのライナーは、再起動のたびにscript.shを実行するジョブを追加します。

crontab -l > file; echo "@reboot /home/user/script.sh" >> file; crontab file; rm file;

クレジットは次のとおりです:Gumby The Green 19年7月16日10:20

https://stackoverflow.com/users/9364000/gumby-the-green

8

Linuxの新しいバージョン supportsystemd(@AlexanderShcheblikinが言ったように)。 Debian固有のソリューションよりも多くの機能があり、移植性が高くなります。

お読みくださいこれは本当に素晴らしいガイド

以下は、必要な最小限のクイックリファレンスです。

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

[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コマンドを実行して、起動時に起動できるようにします。
4
mareoraft

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

4
peterph

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

/etc/supervisor/conf.d/{PROGRAM_NAME}.confに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

3
Cosmo Arun