рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдореИрдВ рдПрдХ рд╕рд╛рдл-рд╕реБрдерд░рд╛, рд▓рдЧрднрдЧ рдмрд┐рдирд╛ рджрд┐рдорд╛рдЧ рд╡рд╛рд▓рд╛ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП, рдЬрдм рдореИрдВрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ pm2 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореИрдВрдиреЗ рддреБрд░рдВрдд рд╕реНрд╡-рд╢рд┐рдХреНрд╖рд╛ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП nodejs
рдкрд░ рдХреБрдЫ рд╕рд░рд▓ рдмреИрдХрдПрдВрдб рд╕реЗрд╡рд╛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдореИрдВ рдЬреЗрдПрд╕ рдХреЛрдб рдореЗрдВ import
( рдИрдПрд╕ 6 рдореЙрдбреНрдпреВрд▓ ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╕реЗ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рджреЛрдиреЛрдВ рдореЗрдВ рд╕рдорд╛рди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдореИрдВрдиреЗ ES6 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рд╕реЗрд╡рд╛ рд▓рд┐рдЦреА рд╣реИред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореИрдВрдиреЗ pm2
рддрд╣рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ ES6 рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд┐рдпрд╛, рдРрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ forever
рдпрд╛ рддреЛ forever
рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ pm2
ред рдХрдЯреМрддреА рдХреЗ рддрд╣рдд - рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЧреНрд░рдВрдереЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯред
рдкрд░рд┐рдЪрдп
рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХ рдПрдХ рдРрд╕реА рд╕реЗрд╡рд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдПрдХ рдЪрд▓ рд░рд╣реЗ nodejs
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдФрд░ рдХреНрд░реИрд╢ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдкреНрд░реЛрд╕реЗрд╕рд░, рдореЗрдореЛрд░реА) рджреНрд╡рд╛рд░рд╛ рдЙрдкрднреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рд▓рд┐рдП) рдирд╣реАрдВ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рд╕реЗрд╡рд╛
рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ ES6 рд╕реЗрд╡рд╛ рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ ( github repo ):
# src/app_es6.mjs import express from "express"; import mod from "./mod/es6.mjs"; const app = express(); const msg = "Hello World! " + mod.getName(); app.get("/", function (req, res) { console.log(msg); res.send(msg); }); app.listen(3000, function () { console.log('ES6 app listening on port 3000!'); });
рдФрд░ ES6 рдореЙрдбреНрдпреВрд▓ рдореЗрдВ:
# src/mod/es6.mjs export default { getName: function () { return "ES6 module is here."; } }
CommonJS рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХреА рдЧрдИ рдПрдХ рд╕рдорд╛рди рд╕реЗрд╡рд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрддреА рд╣реИ:
# src/app_cjs.js const express = require("express"); const mod = require("./mod/cjs.js"); const app = express(); const msg = "Hello World! " + mod.getName(); app.get("/", function (req, res) { console.log(msg); res.send(msg); }); app.listen(3000, function () { console.log("CommonJS app listening on port 3000!"); });
CJS рдореЙрдбреНрдпреВрд▓:
# src/mod/cjs.js module.exports = { getName: function () { return "CommonJS module is here."; } };
nodejs
v12.14.0 рдкрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдирд╛:
$ node --experimental-modules ./src/app_es6.mjs # ES6-service $ node ./src/app_cjs.js # CJS-service
PM2
pm2
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдиреЗрддрд╛ рд╣реИ (рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ , рд╕рдВрд╕рд╛рдзрди рдЙрдкрдпреЛрдЧ рдХреА рдирд┐рдЧрд░рд╛рдиреА , рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд░рдгрдиреАрддрд┐ ) рднреА рд╣реИред
pm2
рд╕реЗрд╡рд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ ( pm2
v4.2.1):
$ pm2 start ./src/app_cjs.js -i 4

рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕реЗрд╡рд╛ рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ:
root@omen17:~# ps -Af | grep app_cjs alex 29848 29828 0 15:31 ? 00:00:00 node /.../src/app_cjs.js alex 29855 29828 0 15:31 ? 00:00:00 node /.../src/app_cjs.js alex 29864 29828 0 15:31 ? 00:00:00 node /.../src/app_cjs.js alex 29875 29828 0 15:31 ? 00:00:00 node /.../src/app_cjs.js
рдПрдХ рдЙрджрд╛рд╣рд░рдг ( PID 29864
) рдХреЛ рдорд╛рд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХ рдиреЗ рддреБрд░рдВрдд рдПрдХ рдирдпрд╛ ( PID 30703
) рдЙрдард╛рдпрд╛:
root@omen17:~# kill -s SIGKILL 29864 root@omen17:~# ps -Af | grep app_cjs alex 29848 29828 0 15:31 ? 00:00:00 node /.../src/app_cjs.js alex 29855 29828 0 15:31 ? 00:00:00 node /.../src/app_cjs.js alex 29875 29828 0 15:31 ? 00:00:00 node /.../src/app_cjs.js alex 30703 29828 7 15:35 ? 00:00:00 node /.../src/app_cjs.js
рд▓реЗрдХрд┐рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ ES6 рд╕рдВрд╕реНрдХрд░рдг pm2
рдореЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрдм рддрд░реНрдХ "--experimental- рдореЙрдбреНрдпреВрд▓" рдХреЛ рдиреЛрдбрдЬ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
$ pm2 start ./src/app_es6.mjs -i 4 --node-args="--experimental-modules"
рдпрд╣ рдЗрд╕ рддрд╕реНрд╡реАрд░ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ:

рд▓реЙрдЧ рдореЗрдВ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ:
$ pm2 log ... /home/alex/.pm2/logs/app-es6-error-2.log last 15 lines: 2|app_es6 | at /usr/lib/node_modules/pm2/node_modules/async/internal/onlyOnce.js:12:16 2|app_es6 | at WriteStream.<anonymous> (/usr/lib/node_modules/pm2/lib/Utility.js:186:13) 2|app_es6 | at WriteStream.emit (events.js:210:5) 2|app_es6 | at internal/fs/streams.js:299:10 2|app_es6 | Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /home/alex/work/sof_es6_pm/src/app_es6.mjs 2|app_es6 | at Object.Module._extensions..mjs (internal/modules/cjs/loader.js:1029:9) 2|app_es6 | at Module.load (internal/modules/cjs/loader.js:815:32) 2|app_es6 | at Function.Module._load (internal/modules/cjs/loader.js:727:14) 2|app_es6 | at /usr/lib/node_modules/pm2/lib/ProcessContainer.js:297:23 2|app_es6 | at wrapper (/usr/lib/node_modules/pm2/node_modules/async/internal/once.js:12:16) 2|app_es6 | at next (/usr/lib/node_modules/pm2/node_modules/async/waterfall.js:96:20) 2|app_es6 | at /usr/lib/node_modules/pm2/node_modules/async/internal/onlyOnce.js:12:16 2|app_es6 | at WriteStream.<anonymous> (/usr/lib/node_modules/pm2/lib/Utility.js:186:13) 2|app_es6 | at WriteStream.emit (events.js:210:5) 2|app_es6 | at internal/fs/streams.js:299:10
рдпрд╣реА рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, pm2
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрд┐рдирд╛ ES6 рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдирд╡реАрдирддрдо рдореБрджреНрджрд╛ 5 рджрд┐рд╕рдВрдмрд░, 2019 (рд▓рдЧрднрдЧ рдПрдХ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ) рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╕рджреИрд╡
forever
рдХреЗ рд▓рд┐рдП pm2
( npmtrends ) рдХреЗ рдмрд╛рдж рдЕрдЧрд▓рд╛ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХ рд╣реИред рдпрд╣ рдПрдХ рдкреБрд░рд╛рдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ (2010 рдореЗрдВ pm2
рд▓рд┐рдП 2013 рдХреЗ рдЦрд┐рд▓рд╛рдл рд╢реБрд░реВ рд╣реБрдИ), рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ pm2
рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░ рдПрдХ рдХрдо рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд pm2
рдмрд┐рдирд╛ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП forever
" pm2
" рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓реЛрдб рд╕рдВрддреБрд▓рди рдФрд░ рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд░реВрдк рдореЗрдВред рдЖрд╡рд╛рдЧрдорди рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП , рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХ рд╕реНрдерд┐рд░ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ (рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд╛рд╕ рдЪрд░рдг рдкрд╣рд▓реЗ рд╣реА рдкрд╛рд░рд┐рдд рд╣реЛ рдЪреБрдХрд╛ рд╣реИ) рдФрд░ рдЖрдк рдЗрд╕рд╕реЗ рдХрд┐рд╕реА рднреА рдирдП рдХрд╛рд░реНрдп рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдореБрдЭреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ nodejs
рдХреЛ forever
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдРрд╕реА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ:
{ "uid": "app_es6", "max": 5, "spinSleepTime": 1000, "minUptime": 1000, "append": true, "watch": false, "script": "src/app_es6.mjs", "command": "node --experimental-modules" }
рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
$ forever start forever.es6.json ... $ forever list info: Forever processes running data: uid command script forever pid id logfile uptime data: [0] app_es6 node --experimental-modules src/app_es6.mjs 3972 3979 /home/ubuntu/.forever/app_es6.log 0:0:0:3.354
рдпреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╕реНрд╡рдпрдВ рд╣реИрдВ:
$ ps -Af | grep es6 ubuntu 3972 1 0 12:01 ? 00:00:00 /usr/bin/node /usr/lib/node_modules/forever/bin/monitor src/app_es6.mjs ubuntu 3979 3972 0 12:01 ? 00:00:00 node --experimental-modules /home/ubuntu/sof_es6_pm/src/app_es6.mjs
рдЬрдм рдкреНрд░рдХреНрд░рд┐рдпрд╛ "рдорд╛рд░" ( PID 3979
) рд╣реЛрддреА рд╣реИ, рддреЛ рдкреНрд░рдмрдВрдзрдХ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдирдпрд╛ ( PID 4013
) рдЙрдард╛рддрд╛ рд╣реИ:
$ kill -s SIGKILL 3979 ubuntu@vsf:~/sof_es6_pm$ ps -Af | grep es6 ubuntu 3972 1 0 12:01 ? 00:00:00 /usr/bin/node /usr/lib/node_modules/forever/bin/monitor src/app_es6.mjs ubuntu 4013 3972 4 12:10 ? 00:00:00 node --experimental-modules /home/ubuntu/sof_es6_pm/src/app_es6.mjs
forever
рд▓рд┐рдП ES6 рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╡рд╛рд▓ рдпрд╣ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдУрдПрд╕ рдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рддреЛ рд▓рд┐рдирдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдкрд░ forever
рдХреНрдпреЛрдВ рдЦреАрдВрдЪ?
systemd
systemd рдЖрдкрдХреЛ рдПрдХ Linux рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕реЗрд╡рд╛рдПрдБ рдмрдирд╛рдиреЗ рдФрд░ рдЕрдЪрд╛рдирдХ рджреБрд░реНрдШрдЯрдирд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЙрдирдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕реЗрд╡рд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдХрд╛рдИ-рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (( ./app_es6.service
))
[Unit] Description=Simple web server with ES6 modules. After=network.target [Service] Type=simple Restart=always PIDFile=/run/app_es6.pid WorkingDirectory=/home/ubuntu/sof_es6_pm ExecStart=/usr/bin/nodejs --experimental-modules /home/ubuntu/sof_es6_pm/src/app_es6.mjs [Install] WantedBy=multi-user.target
рдФрд░ рдЗрд╕реЗ /etc/systemd/system
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ (рдкрде рдлрд╝рд╛рдЗрд▓ рдЗрдХрд╛рдИ рдореЗрдВ рдкреВрд░реНрдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдЕрдЪрд╛рдирдХ рдмрдВрдж рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реЗрд╡рд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ:
Restart=always
рд╕реЗрд╡рд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╢реБрд░реВ рдХреА рдЧрдИ рд╣реИ:
# systemctl start app_es6.service # systemctl status app_es6.service тЧП app_es6.service - Simple web server with ES6 modules. Loaded: loaded (/home/ubuntu/sof_es6_pm/app_es6.service; linked; vendor preset: enabled) Active: active (running) since Thu 2020-01-02 11:09:42 UTC; 9s ago Main PID: 2184 (nodejs) Tasks: 11 (limit: 4662) CGroup: /system.slice/app_es6.service тФФтФА2184 /usr/bin/nodejs --experimental-modules /home/ubuntu/sof_es6_pm/src/app_es6.mjs Jan 02 11:09:42 vsf systemd[1]: Started Simple web server with ES6 modules.. Jan 02 11:09:42 vsf nodejs[2184]: (node:2184) ExperimentalWarning: The ESM module loader is experimental. Jan 02 11:09:42 vsf nodejs[2184]: ES6 app listening on port 3000!
рдЬрдм рдкреНрд░рдХреНрд░рд┐рдпрд╛ "рдорд╛рд░" ( PID 2184
) рд╣реИ, рддреЛ systemd
рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдирдпрд╛ ( PID 2233
) рдЙрдард╛рддрд╛ рд╣реИ:
# ps -Af | grep app_es6 root 2184 1 0 11:09 ? 00:00:00 /usr/bin/nodejs --experimental-modules /home/ubuntu/sof_es6_pm/src/app_es6.mjs # kill -s SIGKILL 2184 # ps -Af | grep app_es6 root 2233 1 3 11:10 ? 00:00:00 /usr/bin/nodejs --experimental-modules /home/ubuntu/sof_es6_pm/src/app_es6.mjs
рдпрд╣реА рд╣реИ, systemd
forever
рдХреА рддрд░рд╣ рд╣реА рдХрд░рддрд╛ forever
, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдореМрд▓рд┐рдХ рд╕реНрддрд░ рдкрд░ред
StrongLoop
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╕рдордп, рд╕реНрдЯреНрд░реЙрдиреНрдЧреНрд▓реЙрдк рдЕрдХреНрд╕рд░ рдкреЙрдк рдЕрдк рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рджрд┐рдЦрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдиреЗ рд╡рд┐рдХрд╛рд╕ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИ (рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг 6.0.3 рдХреЛ 3 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ )ред рдореИрдВ рдЗрд╕реЗ Ubuntu 18.04 рдкрд░ npm
рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рднреА рдЕрд╕рдорд░реНрде рдерд╛:
# npm install -g strongloop npm WARN deprecated swagger-ui@2.2.10: No longer maintained, please upgrade to swagger-ui@3. ... npm ERR! A complete log of this run can be found in: npm ERR! /root/.npm/_logs/2020-01-02T11_25_15_473Z-debug.log
yarn
рдорд╛рдзреНрдпрдо рд╕реЗ yarn
рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рд╕реНрдерд╛рдкрдирд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдкрджрд╛рд╡рдирдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВрдиреЗ рд╕реНрдЯреНрд░реЛрдиреЛрдкреЙрдк рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ред
рдбреЗрд╡рд▓рдкрд░ рдЙрдкрдХрд░рдг
рдмрд╣реБрдд рдмрд╛рд░ pm2
рдмрдЧрд▓ рдореЗрдВ рдФрд░ forever
рд▓рд┐рдП рдРрд╕реЗ рдкреИрдХреЗрдЬ рд╣реЛрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдиреЛрдбрдореЙрди , рд╡реЙрдЪ , рдСрдирдЪреЗрдВрдЬ ред рдпреЗ рдЙрдкрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдФрд░ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдЬреБрдбрд╝реА рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ (рдЖрд╡реЗрджрди рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рд╕рд╣рд┐рдд)ред
рд╕рд╛рд░рд╛рдВрд╢
pm2
рдЬреИрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб JS рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рд╕реЗрд╡рд╛ рд╣реИред рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, pm2
рдЦреБрдж pm2
рдЖрдзреБрдирд┐рдХ nodejs
рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, nodejs
рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде)ред рдЪреВрдВрдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рд▓рд┐рдП рдлрд┐рд▓рд╣рд╛рд▓ рдиреЛрдбрдЬ рдореЗрдВ рд╕рдмрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХ рдкрд╛рд░рдВрдкрд░рд┐рдХ systemd
(рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдХрд▓реНрдк ) рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ pm2
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ pm2
рдЦреБрд╢ pm2
рдЬреИрд╕реЗ рд╣реА pm2
ES6 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИред