web-dev-qa-db-ja.com

起動時にシェルスクリプトを実行する方法

AmazonのLinuxインスタンスでは、start_my_appstop_my_appという2つのスクリプトがあります。これらのスクリプトは、foreverを起動および停止します(これにより、node.jsアプリケーションが実行されます)。これらのスクリプトを使用して、ノードアプリを手動で起動および停止します。ここまでは順調ですね。

私の問題:システムが起動するたびにstart_my_appが実行されるように設定する必要もあります。 init.d内にファイルを追加する必要があること、そしてそれをrc.d内の適切なディレクトリにシンボリックリンクする方法を知っていますが、init.dに配置したファイル内に実際に何を入れる必要があるかわかりません。 start_my_appのように1行にすべきだと思っていますが、それは私にとってうまくいっていません。

320
meetamit

あなたが/etc/init.d/に入れたファイルで、あなたはそれを実行可能に設定しなければなりません:

chmod +x /etc/init.d/start_my_app

@meetamitのおかげで、これが実行されない場合は/etc/rc.d/へのシンボリックリンクを作成する必要があります。

ln -s /etc/init.d/start_my_app /etc/rc.d/

最新のDebianでは、スクリプトがLSBに準拠している必要があるため、これは機能しません(少なくとも以下のアクションを提供してください:開始、停止、再起動、強制リロード、ステータス): https:// wiki.debian.org/LSBInitScripts

注意として、あなたは相対的なものではなくあなたのスクリプトの絶対パスを置くべきです、それは予想外の問題を解決するかもしれません:

/var/myscripts/start_my_app

そしてそのファイルの上に追加することを忘れないでください:

#!/bin/sh
259
Jonathan Muller

このためにcrontabを設定してください

#crontab -e
@reboot  /home/user/test.sh

起動するたびにテストスクリプトが実行されます。

247
Hemant kumar

簡単な方法は/etc/rc.localに行を追加することです。

/PATH/TO/MY_APP &

または、rootとしてコマンドを実行したい場合は、

su - USER_FOOBAR -c /PATH/TO/MY_APP &

(末尾のアンパサンドはプロセスをバックグラウンドにし、rc.localが実行を継続できるようにします)

完全なinitスクリプトが必要な場合は、debian distroにテンプレートファイルがあります。

cp /etc/init.d/skeleton /etc/init.d/your_app

それを少し調整してください。

119
Gilles Quenot

これは私がRed Hatシステムでそれをする方法です

自分のスクリプトをrootと実行可能ファイルが所有する/etc/init.dに入れます。スクリプトの先頭に、chkconfigのディレクティブを付けることができます。たとえば、次のスクリプトは、OracleアプリケーションとしてJavaアプリケーションを起動するために使用されます。

スクリプトの名前は/etc/init.d/apexです。

#!/bin/bash
# chkconfig: 345 99 10
# description: auto start apex listener
#
case "$1" in
 'start')
   su - Oracle -c "cd /opt/apex ; Java -jar apex.war > logs/apex.log 2>logs/apex_error.log &";;
 'stop')
   echo "put something to shutdown or kill the process here";;
esac

これは、スクリプトはレベル3、4、および5で実行する必要があり、開始/停止の優先順位は99および10であることを示しています。

そして、rootユーザーとして、起動時にchkconfigを使ってスクリプトを有効または無効にすることができます。

chkconfig --list apex
chkconfig --add apex

そしてサービス開始/停止頂点を使用できます

32
Saule

cronを使用してSudoを入力します。

Sudo crontab -e

起動時に実行するコマンド、この場合はスクリプトを追加します。

@reboot sh /home/user/test.sh

保存する:

ESCを押してから:xを保存して終了するか、ESCを押してからZZを押す(これはshift + zzです)

テストテストテスト

  1. テストスクリプトがcronなしで実行され、実際に動作することを確認します。

  2. コマンドをcronに保存したことを確認してください。Sudo crontab -eを使用してください。

  3. サーバーを再起動して、すべて正常に動作することを確認します。Sudo @reboot

11
user3140639

ちょうどあなたのcrontabに追加された行を持っています..

ファイルが実行可能であることを確認してください。

chmod +x /path_to_you_file/your_file

Crontabファイルを編集するには:

crontab -e

追加しなければならない行:

@reboot  /path_to_you_file/your_file

それは簡単です!

10

もう1つの選択肢は、crontabに@rebootコマンドを含めることです。

すべてのバージョンのcronがこれをサポートしているわけではありませんが、インスタンスがAmazon Linux AMIに基づいている場合は正常に動作します。

9
chris

あなたはそれをすることができます:

chmod +x PATH_TO_YOUR_SCRIPT/start_my_app 

それからこのコマンドを使います

update-rc.d start_my_app defaults 100

このページの Cyber​​citi をご覧ください。

4
IR PRO

独自の/ init実行ファイルを作成します

これはあなたが望むものではありませんが、それは楽しいです!

任意の実行ファイル、 シェルスクリプト を選んで、コマンドラインパラメータでカーネルを起動するだけです。

init=/path/to/myinit

ブートの終わり頃に、Linuxカーネルは与えられたパスで最初のユーザースペースの実行ファイルを実行します。

いくつかのプロジェクトでは、主要なディストリビューションで使用される一般的なinit実行可能ファイルを提供しています。 systemd、そしてほとんどのディストリビューションではinitは通常のシステム操作で使われるたくさんのプロセスをフォークします。

しかし、システムをよりよく理解するために独自の最小限のスクリプトを実行するために/initそれをハイジャックすることができます。

再現可能な最小限の設定は次のとおりです。 https://github.com/cirosantilli/linux-kernel-module-cheat/tree/f96d4d55c9caa7c0862991025e1291c48c33e3d9/README.md#custom-init

Debian 9に関しては https://askubuntu.com/questions/228304/how-do-i-run-a-script-at-start-up を参照してください。それは私を助けます。 Debian 9のショートバージョン: /etc/rc.local に(rootとして)コマンドを追加

/path_to_file/filename.sh ||  exit 1   # Added by me
exit 0

おそらく、 /path_to_file/filename.sh が実行可能であるべきです(私はそう思う)。

1
Mikhail Ionkin

これ CentOSを実行しているAmazon Linuxインスタンスで簡単なソリューションが機能しました。 /etc/rc.d/rc.localファイルを編集して、そこにコマンドを配置します。このファイルでは、他のすべてのinitスクリプトの後にafter実行されることが記載されています。そのため、その点に注意してください。これは現在、ファイルがどのように見えるかです。 enter image description here 。最後の行は私のスクリプトの名前です。

1
shshnk

Lubuntuでは、私は反対の状況に対処しなければなりませんでした。 Skypeは起動後に起動し、~/.config/autostart/skypeforlinux.desktopというファイルが見つかりました。ファイルの内容は次のとおりです。

[Desktop Entry]
Name=Skype for Linux
Comment=Skype Internet Telephony
Exec=/usr/bin/skypeforlinux
Icon=skypeforlinux
Terminal=false
Type=Application
StartupNotify=false
X-GNOME-Autostart-enabled=true

このファイルを削除すると助かりました。

0
aerijman

無痛で、最も簡単で、そして最も普遍的な方法は単に~.bash_profileまたは~.profile でそれを実行することです(bash_profileファイルがない場合)

そのファイルの最後に実行コマンドを追加するだけで、システム起動時に実行されます。

これを一番下の例にします。 ~\Desktop\sound_fixer.sh

0
Juko

あなたが実行したいのが最も簡単な方法は単純なスクリプト(あるいは何でも)です、あなたがsystem> preferencesそしてstartup appsを使うguiがあるならばです。

必要なスクリプトを参照してください。 (スクリプトを実行可能にする)

0
fieldsweeper
  • スクリプトを/etc/init.d/ディレクトリに追加してください。
  • Rc実行レベルを更新します。$ update-rc.d myScript.sh defaults NNここで、NNは実行する順序です。例えば99は、98の後から100の前まで実行されることを意味します。
0
Kibrom Gebre