私は別のスタートアップスクリプトの質問をするのに長い間この問題で苦労しました。
比較的簡単な起動スクリプトがあります。
### BEGIN INIT INFO
# Provides: startVNC
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Start VNC server at boot time
# Description: Test
### END INIT INFO
#!/bin/sh
echo "JOB RUN AT $(date)"
echo "============================"
echo ""
/usr/bin/vncserver -geometry 1280x1024 -depth 24
明らかに最後の行だけが本当に重要です。スクリプトは実行可能です。
ls -l startVNC
生産する:
-rwxr-xr-x 1 root root 406 2011-12-07 15:45 startVNC
vncserver の起動時に ssh でログインして実行すると、my_user
デスクトップで GUI を表示できます。その後、起動時に実行するために5つのことを試しました。
- 私のスクリプトをにコピーして
/etc/init.d/
呼び出しますupdate-rc.d -f startVNC defaults
(また、99
afterを使用して、スクリプトが依存しているすべてがすでに実行されていることをdefaults
確認します)。vncserver
フォルダに作成されたすべてのシンボリックリンクを確認しました/etc/rcX.d/
。ただし、再起動または起動時には機能しません。 /etc/rc.local
前に私のスクリプトを追加してください。exit 0
crontab -e
次のように追加されました@reboot /home/my_user/scripts/startVNC
- 私のスクリプトを次に追加してください。
/etc/init.d/rcS
- システム - >デフォルト設定 - > Gnomeのアプリケーションの起動に私のスクリプトを追加しました。
しかし、それらのどれも動作しません。また何を確認できますか?私のスクリプトに問題があるのではないでしょうか?プロセスが機能するにはプロセスの所有者である必要があると思いますmy_user
が、デバッグする方法がわかりません。
どんな手がかりもありがとうございます。
答え1
使用できるsu
[あなたのユーザー名]-c /usr/bin/vncserver
rootの代わりにユーザーとしてvncserverを実行します。
別のポイント:スクリプトでは、VNCサーバーの起動と停止の間に違いはありません。通常、initスクリプトはさまざまなケースを使用してサービスを開始/停止します。
case "$1" in
start)
# code to start the application
;;
stop)
# code to stop the application
;;
restart)
$0 stop
$0 start
;;
esac
ここ以下は、initスクリプトを使用してvncサーバーを起動する方法の詳細な例です。
答え2
わかりました、わかりました。問題は次のとおりです。
- 一般的に何が起こるのかは、私のスクリプトをrootとして実行しても機能しないことです。そのため、必ず使用してください。
su [my_user] -c
オプションは引用する必要があります。
su my_user -c "/usr/bin/vncserver -geometry1280x1024 -深さ16"
私も付け加えました
. /lib/lsb/init-functions
。exit 0
これが必要かどうかはわかりませんが、どのような害を及ぼさないと確信しています。提供された詳細な例からコピーしました。トフワワーフ。
だから私は次のように終わります。
### BEGIN INIT INFO
# Provides: startVNC
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Start VNC server at boot time
# Description: A sophisticated script to do the job.
### END INIT INFO
#!/bin/sh
echo "JOB RUN AT $(date)"
echo "============================"
echo ""
. /lib/lsb/init-functions
su my_user -c "/usr/bin/vncserver -geometry 1280x1024 -depth 16"
exit 0
良い結果。もちろん、上記で引用した内容を使うとうまく設計されたスクリプトより良いかもしれません。次のように起動にスクリプトを追加しました。
sudo update-rc.d -f startVNC start 99 2 3 4 5 .
終了時に何も実行する理由がないためです(私が実行していないロギングを除く)。
私の元の質問でshebang(#!で始まる行)が正しく配置されていないという説明も参照してください。しかし、動作するので、ここにテストされていないコードを含めたくありません。使いたいなら変えるべきだと思います。