1

コマンドラインからサーバーを実行node server.jsすると、upstart スクリプトでサーバーを起動した場合とは異なる方法で実行されます (具体的には、プッシュ通知が機能します)。この問題を解決するには、upstart スクリプトをどのように変更すればよいですか?

アップスタートでプッシュが失敗し、コマンドラインで成功するサーバーの例を次に示します。

var apn = require('apn');
var options = {
  passphrase:'certpassphrase'
};
var err = null;
var apnConnection = new apn.Connection(options);

apnConnection.on('error', function(error){
  console.log("apscallback", 1, error);
});

apnConnection.on('transmitted', function(notification){
  console.log("apscallback", 2);
  console.log(notification);
});

apnConnection.on('timeout', function(){
  console.log("apscallback", 3);
});

apnConnection.on('connected', function(){
  console.log("apscallback", 4);
});

apnConnection.on('disconnected', function(){
  console.log("apscallback", 5);
});

apnConnection.on('socketError', function(error){
  console.log("apscallback", 6, error);
});

apnConnection.on('transmissionError', function(errorCode, notification){
  console.log("apscallback", 7, errorCode);
});

apnConnection.on('cacheTooSmall', function(difference){
  console.log("apscallback", 8);
});

function sendTestNotification() {
  var deviceToken = 'mydevicetoken';
  var myDevice = new apn.Device(deviceToken);
    var note = new apn.Notification();

    note.expiry = Math.floor(Date.now() / 1000) + 60; // Expires 1 hour from now.
    // note.badge = 3;
    // note.sound = "ping.aiff";
    // note.alert = "\uD83D\uDCE7 \u2709 You have a new message";
    note.payload = {'message': 'somemessage', 'requester': 7};
    apnConnection.pushNotification(note, myDevice);
}

sendTestNotification();


http.listen(port, function(){
  console.log('listening on *:', port);
});

そして、ここに私のupstartスクリプトがどのように見えるかがあります:

#!upstart
description "My Server"

start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

env NODE_ENV=production
chdir /home/user/my-server/
exec node /home/user/my-server/server.js >> /var/log/my-server.log 2>&1

私が得るエラーは次のとおりです。

...
apscallback 4
apscallback 5
apscallback 1 [Error: Socket unusable after connection. Hint: You may be using a certificate for the wrong environment]
... (REPEATS)
4

2 に答える 2

0

あなたは新興スクリプトであり、デフォルトでルートになっている可能性があります。おそらく、ルートのキーリングに適切な証明書がありません。upstart スクリプトでユーザーを暗黙的に設定してみてください。

ユーザーを設定できるはずですsetuid <username>

于 2014-12-09T04:15:07.867 に答える