我有需要在引導和的www數據用戶下運行來啓動一個Node.js的腳本。在開發過程中,我總是開始使用腳本:運行腳本rc.local中:腳本工作,但不會在引導
su www-data -c 'node /var/www/php-jobs/manager.js
我看到了到底發生了什麼,manager.js現在工作的很好。搜索所以我發現我必須把它放在我的/etc/rc.local
。另外,我學會了將輸出指向一個日誌文件並附加2>&1
以「將stderr重定向到標準輸出」,它應該是一個守護進程,因此最後一個字符是&
。
最後,我/etc/rc.local
看起來是這樣的:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
su www-data -c 'node /var/www/php-jobs/manager.js >> /var/log/php-jobs.log 2>&1 &'
exit 0
如果我運行這個自己(sudo /etc/rc.local
):是的,它的作品!但是,如果我執行重新啓動沒有node
進程正在運行,/var/log/php-jobs.log
不存在,因此,manager.js不起作用。發生什麼事?
如果添加'nohup(1)',它會起作用嗎? 'su www-data -c'nohup node /var/www/php-jobs/manager.js >> /var/log/php-jobs.log 2>&1&''或者你需要給絕對路徑'節點'因爲它不在'早期啓動時使用的'PATH'中? 'su www-data -c'/ path/to/node /var/www/php-jobs/manager.js >> /var/log/php-jobs.log 2>&1&'' – sarnold
不幸的是,不管工作。我試過a)添加nohup b)添加絕對路徑/ usr/bin /節點和c)檢查/var/log/php-jobs.log的權限,將它們設置爲www-data:www-data。重啓後,沒有'node'進程(如果我自己啓動它,則是這種情況),並且/var/log/php-jobs.log爲空。感謝您的快速回復,其他建議? –
也許增加'upstart'配置文件; [顯然它需要'HOME'配置](http://kevin.vanzonneveld.net/techblog/article/run_nodejs_as_a_service_on_ubuntu_karmic/)? – sarnold