paths.js 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /**
  2. * Copyright 2013-2022 the PM2 project authors. All rights reserved.
  3. * Use of this source code is governed by a license that
  4. * can be found in the LICENSE file.
  5. */
  6. var debug = require('debug')('pm2:paths');
  7. var p = require('path');
  8. var fs = require('fs')
  9. function getDefaultPM2Home() {
  10. var PM2_ROOT_PATH;
  11. if (process.env.PM2_HOME)
  12. PM2_ROOT_PATH = process.env.PM2_HOME;
  13. else if (process.env.HOME && !process.env.HOMEPATH)
  14. PM2_ROOT_PATH = p.resolve(process.env.HOME, '.pm2');
  15. else if (process.env.HOME || process.env.HOMEPATH)
  16. PM2_ROOT_PATH = p.resolve(process.env.HOMEDRIVE, process.env.HOME || process.env.HOMEPATH, '.pm2');
  17. else {
  18. console.error('[PM2][Initialization] Environment variable HOME (Linux) or HOMEPATH (Windows) are not set!');
  19. console.error('[PM2][Initialization] Defaulting to /etc/.pm2');
  20. PM2_ROOT_PATH = p.resolve('/etc', '.pm2');
  21. }
  22. debug('pm2 home resolved to %s', PM2_ROOT_PATH, process.env.HOME);
  23. return PM2_ROOT_PATH;
  24. }
  25. module.exports = function(PM2_HOME) {
  26. var has_node_embedded = false
  27. if (fs.existsSync(p.resolve(__dirname, './node')) === true) {
  28. has_node_embedded = true
  29. }
  30. if (!PM2_HOME) {
  31. PM2_HOME = getDefaultPM2Home()
  32. }
  33. var pm2_file_stucture = {
  34. PM2_HOME : PM2_HOME,
  35. PM2_ROOT_PATH : PM2_HOME,
  36. PM2_CONF_FILE : p.resolve(PM2_HOME, 'conf.js'),
  37. PM2_MODULE_CONF_FILE : p.resolve(PM2_HOME, 'module_conf.json'),
  38. PM2_LOG_FILE_PATH : p.resolve(PM2_HOME, 'pm2.log'),
  39. PM2_PID_FILE_PATH : p.resolve(PM2_HOME, 'pm2.pid'),
  40. PM2_RELOAD_LOCKFILE : p.resolve(PM2_HOME, 'reload.lock'),
  41. DEFAULT_PID_PATH : p.resolve(PM2_HOME, 'pids'),
  42. DEFAULT_LOG_PATH : p.resolve(PM2_HOME, 'logs'),
  43. DEFAULT_MODULE_PATH : p.resolve(PM2_HOME, 'modules'),
  44. PM2_IO_ACCESS_TOKEN : p.resolve(PM2_HOME, 'pm2-io-token'),
  45. DUMP_FILE_PATH : p.resolve(PM2_HOME, 'dump.pm2'),
  46. DUMP_BACKUP_FILE_PATH : p.resolve(PM2_HOME, 'dump.pm2.bak'),
  47. DAEMON_RPC_PORT : p.resolve(PM2_HOME, 'rpc.sock'),
  48. DAEMON_PUB_PORT : p.resolve(PM2_HOME, 'pub.sock'),
  49. INTERACTOR_RPC_PORT : p.resolve(PM2_HOME, 'interactor.sock'),
  50. INTERACTOR_LOG_FILE_PATH : p.resolve(PM2_HOME, 'agent.log'),
  51. INTERACTOR_PID_PATH : p.resolve(PM2_HOME, 'agent.pid'),
  52. INTERACTION_CONF : p.resolve(PM2_HOME, 'agent.json5'),
  53. HAS_NODE_EMBEDDED : has_node_embedded,
  54. BUILTIN_NODE_PATH : has_node_embedded === true ? p.resolve(__dirname, './node/bin/node') : null,
  55. BUILTIN_NPM_PATH : has_node_embedded === true ? p.resolve(__dirname, './node/bin/npm') : null,
  56. };
  57. // allow overide of file paths via environnement
  58. var paths = Object.keys(pm2_file_stucture);
  59. paths.forEach(function (key) {
  60. var envKey = key.indexOf('PM2_') > -1 ? key : 'PM2_' + key;
  61. if (process.env[envKey] && key !== 'PM2_HOME' && key !== 'PM2_ROOT_PATH') {
  62. pm2_file_stucture[key] = process.env[envKey];
  63. }
  64. });
  65. if (process.platform === 'win32' ||
  66. process.platform === 'win64') {
  67. //@todo instead of static unique rpc/pub file custom with PM2_HOME or UID
  68. pm2_file_stucture.DAEMON_RPC_PORT = '\\\\.\\pipe\\rpc.sock';
  69. pm2_file_stucture.DAEMON_PUB_PORT = '\\\\.\\pipe\\pub.sock';
  70. pm2_file_stucture.INTERACTOR_RPC_PORT = '\\\\.\\pipe\\interactor.sock';
  71. }
  72. return pm2_file_stucture;
  73. };