instagram_mqtt icon indicating copy to clipboard operation
instagram_mqtt copied to clipboard

write EPIPE app crash

Open Eonus21 opened this issue 4 years ago • 7 comments

 events.js:292
       throw er; // Unhandled 'error' event
       ^

 Error: write EPIPE
     at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:92:16)
     at handleWriteReq (internal/stream_base_commons.js:51:26)
     at writeGeneric (internal/stream_base_commons.js:143:15)
     at TLSSocket.Socket._writeGeneric (net.js:786:11)
     at TLSSocket.Socket._write (net.js:798:8)
     at doWrite (_stream_writable.js:403:12)
     at clearBuffer (_stream_writable.js:542:7)
     at onwrite (_stream_writable.js:454:7)
     at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:101:10)
 Emitted 'error' event on TLSSocket instance at:
     at errorOrDestroy (internal/streams/destroy.js:108:12)
     at TLSSocket.onerror (_stream_readable.js:753:7)
     at TLSSocket.emit (events.js:315:20)
     at TLSSocket.EventEmitter.emit (domain.js:482:12)
     at emitErrorNT (internal/streams/destroy.js:92:8)
     at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
     at processTicksAndRejections (internal/process/task_queues.js:84:21) {
   errno: 'EPIPE',
   code: 'EPIPE',
   syscall: 'write'
 }

I receive error like this, and it crashes my app. Where I need to make error handler for this? @Nerixyz

Eonus21 avatar Jan 19 '21 10:01 Eonus21

Another such crash log

 events.js:292
       throw er; // Unhandled 'error' event
       ^

 Error: write EPIPE
     at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:92:16)
     at handleWriteReq (internal/stream_base_commons.js:51:26)
     at writeGeneric (internal/stream_base_commons.js:143:15)
     at TLSSocket.Socket._writeGeneric (net.js:786:11)
     at TLSSocket.Socket._write (net.js:798:8)
     at doWrite (_stream_writable.js:403:12)
     at writeOrBuffer (_stream_writable.js:387:5)
     at TLSSocket.Writable.write (_stream_writable.js:318:11)
     at PassThrough.ondata (_stream_readable.js:717:22)
     at PassThrough.emit (events.js:315:20)
     at PassThrough.EventEmitter.emit (domain.js:482:12)
     at addChunk (_stream_readable.js:295:12)
     at readableAddChunk (_stream_readable.js:271:9)
     at PassThrough.Readable.push (_stream_readable.js:212:10)
     at PassThrough.Transform.push (_stream_transform.js:152:32)
     at PassThrough.afterTransform (_stream_transform.js:96:10)
     at PassThrough._transform (_stream_passthrough.js:46:3)
     at PassThrough.Transform._read (_stream_transform.js:191:10)
     at PassThrough.Transform._write (_stream_transform.js:179:12)
     at doWrite (_stream_writable.js:403:12)
     at writeOrBuffer (_stream_writable.js:387:5)
     at PassThrough.Writable.write (_stream_writable.js:318:11)
     at Duplexify._write (/home/inst-ts/node_modules/duplexify/index.js:212:22)
     at doWrite (/home/inst-ts/node_modules/duplexify/node_modules/readable-stream/lib/_stream_writable.js:409:139)
     at writeOrBuffer (/home/inst-ts/node_modules/duplexify/node_modules/readable-stream/lib/_stream_writable.js:398:5)
     at Duplexify.Writable.write (/home/inst-ts/node_modules/duplexify/node_modules/readable-stream/lib/_stream_writable.js:307:11)
     at MQTToTClient.sendData (/home/inst-ts/node_modules/mqtts/dist/mqtt.client.js:234:31)
     at /home/inst-ts/node_modules/mqtts/dist/mqtt.client.js:177:22
 Emitted 'error' event on TLSSocket instance at:
     at errorOrDestroy (internal/streams/destroy.js:108:12)
     at TLSSocket.onerror (_stream_readable.js:753:7)
     at TLSSocket.emit (events.js:315:20)
     at TLSSocket.EventEmitter.emit (domain.js:482:12)
     at emitErrorNT (internal/streams/destroy.js:92:8)
     at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
     at processTicksAndRejections (internal/process/task_queues.js:84:21)
     at runNextTicks (internal/process/task_queues.js:66:3)
     at listOnTimeout (internal/timers.js:518:9)
     at processTimers (internal/timers.js:492:7) {
   errno: 'EPIPE',
   code: 'EPIPE',
   syscall: 'write'
 }

Eonus21 avatar Jan 19 '21 10:01 Eonus21

Do you have any debug logs (withe the DEBUG env-variable; maybe with ig:*,mqtts:*)?

Also, when does this happen? Do you have any code snippet?

Nerixyz avatar Jan 19 '21 11:01 Nerixyz

Receive this error today again, 3:51 AM. Last app restart was yesterday 4:35 PM. No, I have not logs now, will enable them today. I set my .env file as this

DEBUG=ig:*,mqtts:*

Where can I see this logs? P.S. I use ts-dotenv with my .env file, can it be a problem?

Eonus21 avatar Jan 20 '21 07:01 Eonus21

I can show u how I handle fbns & realtime errors

private onRealtimeError = async (err:Error) => {
        if (this.onRealtimeErrorBlock)
            return this.notifier?.notify('Ignoring realtime error (blocked) ' + err.message + ' with ' + this.login) 
        // notify is method to send me logs to telegram (from my bot)
        // I need error block because realtime and fbns emits several errors at the same time
        this.onRealtimeErrorBlock = true

        if ((err.message.indexOf('willReconnect: true') > -1)) {
            this.onRealtimeErrorBlock = false
            return this.notifier?.notify('Ignoring realtime error ' + err.message + ' with ' + this.login)
             // lib will try to reconnect, nothing to do
        }
        if (err.message.indexOf('force destroy') > -1) {
            this.onRealtimeErrorBlock = false
            return this.notifier?.notify('Ignoring realtime error ' + err.message + ' with ' + this.login)
            // someone calls destroy ()
        }
        if ((err.message.indexOf('Expected client to be created') > -1)) {
            this.onRealtimeErrorBlock = false
            return this.notifier?.notify('Ignoring realtime error ' + err.message + ' with ' + this.login)
            // emits after i call this.client.realtime.disconnect
        }
        await this.notifier?.notify('Realtime error:' + err.message + '\nlogin:' + this.login)
        let action = await this.errorHandler.handle(err, ErrorContext.RealtimeError) 
        // error handler makes logs of errors and returns action
        await this.notifier?.notify('Error action ' + action + '\nlogin:' + this.login)
        if (action == ErrorAction.Wait) {
            //try { await this.client.realtime.disconnect() } catch (e) {}
            try { 
                try { await this.promiseWithTimeout<any>(5000, this.client.realtime.disconnect) } catch (e) { this.notifier?.notify('Disconnect error realtime ' + e.message + ' login ' + this.login) } 
                // promise with max duration 5 seconds ( I had problems without this before). 
                // also I try to disconect because I am not sure that on error client was disconnected
                await this.connectRealtime() 
            } catch (e) {
                this.notifier?.notify('Realtime reconnect error \nlogin:' + this.login + '\nerror:' + e.message)
                this.onRealtimeErrorBlock = false
                //this.onRealtimeError(e)
                return
            }
            this.notifier?.notify('Realtime reconnect success \nlogin:' + this.login)
            this.onRealtimeErrorBlock = false
        } else if (action == ErrorAction.Relogin) {
            try { 
                this.restart(false)
            }
            catch (e) {
                this.notifier?.notify('Restart (reason:realtime) error:' + err.message + '\nlogin:' + this.login)
                this.onRealtimeErrorBlock = false
                return
            }
            this.notifier?.notify('Restart success (reason:realtime) \nlogin:' + this.login)
            this.onRealtimeErrorBlock = false
        } else if (action == ErrorAction.Stop) {
            try { 
                await this.forceStop(this.login, this.token)
            }
            catch (e) {
                this.notifier?.notify('Force stop (reason:realtime) error:' + err.message + '\nlogin:' + this.login)
                this.onRealtimeErrorBlock = false
                return
            }
            this.notifier?.notify('Force stop success (reason:realtime) \nlogin:' + this.login)
            this.onRealtimeErrorBlock = false
        } else this.notifier?.notify('Unknown action returned with ' + this.login + ' value:' + action)
    }

connectRealtime () is my function with ig.realtime.connect () inside it. For fbns I have same as onRealtimeError function, but with fbns instead realtime Additional - I use proxy, socks5

Eonus21 avatar Jan 20 '21 07:01 Eonus21

Where can I see this logs?

I think the logs are in stderr.

Nerixyz avatar Jan 20 '21 12:01 Nerixyz

Okay, I will wait until error ocurs, then check and send to here all information

Eonus21 avatar Jan 20 '21 13:01 Eonus21

I receive error like the first time, today 1:43 AM, and no logs. What can I do to enable them?

 events.js:292
       throw er; // Unhandled 'error' event
       ^

 Error: write EPIPE
     at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:92:16)
     at handleWriteReq (internal/stream_base_commons.js:51:26)
     at writeGeneric (internal/stream_base_commons.js:143:15)
     at TLSSocket.Socket._writeGeneric (net.js:786:11)
     at TLSSocket.Socket._write (net.js:798:8)
     at doWrite (_stream_writable.js:403:12)
     at clearBuffer (_stream_writable.js:542:7)
     at onwrite (_stream_writable.js:454:7)
     at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:101:10)
 Emitted 'error' event on TLSSocket instance at:
     at errorOrDestroy (internal/streams/destroy.js:108:12)
     at TLSSocket.onerror (_stream_readable.js:753:7)
     at TLSSocket.emit (events.js:315:20)
     at TLSSocket.EventEmitter.emit (domain.js:482:12)
     at emitErrorNT (internal/streams/destroy.js:92:8)
     at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
     at processTicksAndRejections (internal/process/task_queues.js:84:21) {
   errno: 'EPIPE',
   code: 'EPIPE',
   syscall: 'write'
 }

I receive error like this, and it crashes my app. Where I need to make error handler for this? @Nerixyz

Eonus21 avatar Jan 21 '21 07:01 Eonus21