AmazonのLinuxインスタンスでは、start_my_app
とstop_my_app
という2つのスクリプトがあります。これらのスクリプトは、foreverを起動および停止します(これにより、node.jsアプリケーションが実行されます)。これらのスクリプトを使用して、ノードアプリを手動で起動および停止します。ここまでは順調ですね。
私の問題:システムが起動するたびにstart_my_app
が実行されるように設定する必要もあります。 init.d
内にファイルを追加する必要があること、そしてそれをrc.d
内の適切なディレクトリにシンボリックリンクする方法を知っていますが、init.d
に配置したファイル内に実際に何を入れる必要があるかわかりません。 start_my_app
のように1行にすべきだと思っていますが、それは私にとってうまくいっていません。
あなたが/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
このためにcrontabを設定してください
#crontab -e
@reboot /home/user/test.sh
起動するたびにテストスクリプトが実行されます。
簡単な方法は/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
それを少し調整してください。
これは私が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
そしてサービス開始/停止頂点を使用できます
cron
を使用してSudo
を入力します。
Sudo crontab -e
起動時に実行するコマンド、この場合はスクリプトを追加します。
@reboot sh /home/user/test.sh
保存する:
ESCを押してから:xを保存して終了するか、ESCを押してからZZを押す(これはshift + zzです)
テストテストテスト :
テストスクリプトがcronなしで実行され、実際に動作することを確認します。
コマンドをcronに保存したことを確認してください。Sudo crontab -e
を使用してください。
サーバーを再起動して、すべて正常に動作することを確認します。Sudo @reboot
ちょうどあなたのcrontabに追加された行を持っています..
ファイルが実行可能であることを確認してください。
chmod +x /path_to_you_file/your_file
Crontabファイルを編集するには:
crontab -e
追加しなければならない行:
@reboot /path_to_you_file/your_file
それは簡単です!
もう1つの選択肢は、crontabに@rebootコマンドを含めることです。
すべてのバージョンのcronがこれをサポートしているわけではありませんが、インスタンスがAmazon Linux AMIに基づいている場合は正常に動作します。
あなたはそれをすることができます:
chmod +x PATH_TO_YOUR_SCRIPT/start_my_app
それからこのコマンドを使います
update-rc.d start_my_app defaults 100
このページの Cyberciti をご覧ください。
独自の/ 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 が実行可能であるべきです(私はそう思う)。
これ CentOSを実行しているAmazon Linuxインスタンスで簡単なソリューションが機能しました。 /etc/rc.d/rc.local
ファイルを編集して、そこにコマンドを配置します。このファイルでは、他のすべてのinitスクリプトの後にafter実行されることが記載されています。そのため、その点に注意してください。これは現在、ファイルがどのように見えるかです。 。最後の行は私のスクリプトの名前です。
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
このファイルを削除すると助かりました。
無痛で、最も簡単で、そして最も普遍的な方法は単に~.bash_profile
または~.profile
でそれを実行することです(bash_profileファイルがない場合) 。
そのファイルの最後に実行コマンドを追加するだけで、システム起動時に実行されます。
これを一番下の例にします。 ~\Desktop\sound_fixer.sh
あなたが実行したいのが最も簡単な方法は単純なスクリプト(あるいは何でも)です、あなたがsystem> preferencesそしてstartup appsを使うguiがあるならばです。
必要なスクリプトを参照してください。 (スクリプトを実行可能にする)
$ update-rc.d myScript.sh defaults NN
ここで、NNは実行する順序です。例えば99は、98の後から100の前まで実行されることを意味します。