Ubuntu
init.d 腳本未在啟動時啟動
我有一個我認為很簡單的腳本,我想在啟動時執行它,但是我對
init.d
腳本很陌生,也許一般來說有更好的方法來做到這一點。基本上我希望我的腳本在系統啟動時執行,所以我有一個 ruby 腳本,我已將其移至
/usr/bin
,並命名為consumer
為簡潔起見說它看起來像這樣,但實際上做了一些事情:
#!/usr/bin/env ruby # just example code puts "do stuff"
然後我將我的
init.d
腳本放入/etc/init.d
並命名為consumer
.#!/bin/bash ### BEGIN INIT INFO # Provides: consumer # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Enable service provided by daemon. ### END INIT INF # /etc/init.d/consumer # # Some things that run always touch /var/lock/consumer # Carry out specific functions when asked to by the system case "$1" in start) echo "Starting Consumer" consumer & echo "Consumer started successfully." ;; stop) echo "Stopping Consumer" echo "Nothing happened..." ;; *) echo "Usage: /etc/init.d/consumer {start|stop}" exit 1 ;; esac exit 0
現在,如果我保存這個文件並執行
sudo /etc/init.d/consumer start
,它就完美了!它開始並給了我想要的輸出。然後我執行:$ sudo update-rc.d consumer defaults Adding system startup for /etc/init.d/consumer ... /etc/rc0.d/K20consumer -> ../init.d/consumer /etc/rc1.d/K20consumer -> ../init.d/consumer /etc/rc6.d/K20consumer -> ../init.d/consumer /etc/rc2.d/S20consumer -> ../init.d/consumer /etc/rc3.d/S20consumer -> ../init.d/consumer /etc/rc4.d/S20consumer -> ../init.d/consumer /etc/rc5.d/S20consumer -> ../init.d/consumer
但是當重新啟動系統時,我的腳本永遠不會啟動,有什麼想法嗎?我不確定下一步要採取什麼行動。我已將所有腳本權限調整為
775
,並確保root
也擁有它們。任何幫助都會非常有幫助。
執行“consumer &”只會將任務置於後台並繼續。如果擁有的 shell 終止,它將終止所有後台任務。您說腳本在命令行上工作,但如果您註銷,您的守護程序將無法生存?
你想用 start-stop-daemon 之類的東西來啟動你的守護程序。
編輯:實際上,再次閱讀您的文字時,我不確定消費者是否是守護程序?如果你只是想在啟動時執行一些程式碼(例如打掃房間),你可以在 /etc/rc.local 中寫一行。
如果該腳本需要很長時間才能執行,您可能想要放棄它。IE:
consumer & disown %1
該腳本現在將在 shell 終止後繼續存在。請注意,如果 shell 輸出文本,它將保留相同的 tty,這可能會導致問題,這取決於它擁有的 shell 終止後發生的情況。