ウェブサーバーを起動する/etc/init.dスクリプトがあります。実行可能にして追加しました(update-rc.d webserver defaults
)。コマンドラインからスクリプトを実行すると、正常に動作します(./webserver
)。
しかし、システムを再起動した後、ウェブサーバーが実行されていません。
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
cd ~/projects/webserver
./.build/debug/webserver &
exit 0
ユーザーディレクトリに問題はありますか(ルートとしてログインしていますか)?
必要なチルダ展開のタイプは、シェルの現在のユーザーを参照して実行されます。たとえば、ルートとしてログインすると、~
は/root
になります。ログインする前にスクリプトを実行すると、~
を目的のディレクトリに展開できません。
スクリプト内のファイルへのフルパスを使用します。
将来の参考のために、 here は、スクリプトでチルダ展開を使用する便利な例です
さて、スクリプトに問題があります。スクリプトを記述するときは、tilde(〜)の代わりに絶対パスを使用してください。それがスクリプトを使用不能にした犯人である可能性があります。 dirを変更する場合は、〜/ projectsの代わりに/ home/scripts/projects /のようなフルパスを指定します。これにより、さらに大きな違いが生じます。
Sudo su
chmod a+x /etc/init.d/webserver
update-rc.d webserver defaults
2)再起動時にcronジョブを追加します。
Sudo su
crontab -e
@reboot /home/path/to/script.sh
3)最後の行exitの前にコマンドをrc.localファイルに追加します。
Sudo su
nano /etc/rc.local
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
cd /absolute/path/projects/webserver
./.build/debug/webserver &