Skip to content

Commit 7b83c19

Browse files
authored
Support graceful shutdowns (#36909)
## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have helpful link attached, see `contributing.md` ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [x] Related issues linked using [19693](#19693) - [ ] Integration tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have helpful link attached, see `contributing.md` ## Documentation / Examples - [ x] Make sure the linting passes by running `yarn lint` Closes #29959
1 parent b11d441 commit 7b83c19

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

docs/deployment.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,29 @@ Next.js will automatically load the latest version of your application in the ba
9898

9999
**Note:** If a new page (with an old version) has already been prefetched by `next/link`, Next.js will use the old version. Navigating to a page that has _not_ been prefetched (and is not cached at the CDN level) will load the latest version.
100100

101+
## Manual Graceful shutdowns
102+
103+
Sometimes you might want to run some cleanup code on process signals like `SIGTERM` or `SIGINT`.
104+
105+
You can do that by setting the env variable `NEXT_MANUAL_SIG_HANDLE` to `true` and then register a handler for that signal inside your `_document.js` file.
106+
107+
```js
108+
// pages/_document.js
109+
110+
if (process.env.NEXT_MANUAL_SIG_HANDLE) {
111+
// this should be added in your custom _document
112+
process.on('SIGTERM', () => {
113+
console.log('Received SIGTERM: ', 'cleaning up')
114+
process.exit(0)
115+
})
116+
117+
process.on('SIGINT', () => {
118+
console.log('Received SIGINT: ', 'cleaning up')
119+
process.exit(0)
120+
})
121+
}
122+
```
123+
101124
## Related
102125

103126
For more information on what to do next, we recommend the following sections:

packages/next/bin/next.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,11 @@ if (process.versions.pnp === '3') {
129129
}
130130

131131
// Make sure commands gracefully respect termination signals (e.g. from Docker)
132-
process.on('SIGTERM', () => process.exit(0))
133-
process.on('SIGINT', () => process.exit(0))
132+
// Allow the graceful termination to be manually configurable
133+
if (!process.env.NEXT_MANUAL_SIG_HANDLE) {
134+
process.on('SIGTERM', () => process.exit(0))
135+
process.on('SIGINT', () => process.exit(0))
136+
}
134137

135138
commands[command]()
136139
.then((exec) => exec(forwardedArgs))

0 commit comments

Comments
 (0)