Since version 0.10.2, Monero has reportedly supported the ability to run two or more instances of monerod with only one copy of the ful blockchain database:
added support for multiple daemons using the same LMDB database
One instance of the daemon I wish to run bound to a public-facing port, for use with e.g., my own personal wallet on a remote machine. A second instance of the daemon I wish to run bound to a non-public-facing port, for use with e.g., my own mining pool on the local machine. I have no issue with either of these cases individually and have confirmed they both work. However, any additional instances of the daemon crash during startup.
One use-case described in the answer to this question is actually very similar to what I attempt to do.
I launch the first instance of monerod with the command:
./monerod --rpc-bind-port <non-public-facing port>
This first instance starts up fine, blockchain syncs successfully, etc. If I alter the arguments to use a public-facing port plus a few other changes (--rpc-bind-ip, --restricted-rpc, --confirm-external-bind) I can successfully connect a remote wallet to the daemon. Everything appears to work correctly when running one instance of the daemon.
I launch the second instance of monerod with the command:
./monerod --rpc-bind-port <different arbitrary unused port>
The output is as follows:
2018-01-07 11:31:08.021 INFO global src/daemon/main.cpp:285 Monero 'Helium Hydra' (v0.11.0.0-0e7b29d)
2018-01-07 11:31:08.022 INFO global src/daemon/protocol.h:55 Initializing cryptonote protocol...
2018-01-07 11:31:08.022 INFO global src/daemon/protocol.h:60 Cryptonote protocol initialized OK
2018-01-07 11:31:08.022 INFO global src/daemon/p2p.h:63 Initializing p2p server...
2018-01-07 11:31:08.345 INFO global src/daemon/core.h:89 Deinitializing core...
2018-01-07 11:31:08.352 ERROR daemon src/daemon/core.h:94 Failed to deinitialize core...
2018-01-07 11:31:08.354 INFO global src/daemon/protocol.h:77 Stopping cryptonote protocol...
2018-01-07 11:31:08.356 INFO global src/daemon/protocol.h:81 Cryptonote protocol stopped successfully
2018-01-07 11:31:08.358 ERROR daemon src/daemon/main.cpp:293 Exception in main! Failed to initialize p2p server.
I then attempt to log additional debug info by appending the argument: --log-file /dev/stdout
The output is as follows:
2018-01-07 11:40:20.767 INFO logging contrib/epee/src/mlog.cpp:180 New log categories: *:WARNING,net:FATAL,net.p2p:FATAL,net.cn:FATAL,global:INFO,verify:FATAL,stacktrace:INFO,logging:INFO,msgwriter:INFO
2018-01-07 11:40:20.768 INFO global src/daemon/main.cpp:285 Monero 'Helium Hydra' (v0.11.0.0-0e7b29d)
2018-01-07 11:40:20.768 INFO global src/daemon/main.cpp:285 Monero 'Helium Hydra' (v0.11.0.0-0e7b29d)
2018-01-07 11:40:20.769 INFO global src/daemon/protocol.h:55 Initializing cryptonote protocol...
2018-01-07 11:40:20.769 INFO global src/daemon/protocol.h:55 Initializing cryptonote protocol...
2018-01-07 11:40:20.769 INFO global src/daemon/protocol.h:60 Cryptonote protocol initialized OK
2018-01-07 11:40:20.769 INFO global src/daemon/protocol.h:60 Cryptonote protocol initialized OK
2018-01-07 11:40:20.770 INFO global src/daemon/p2p.h:63 Initializing p2p server...
2018-01-07 11:40:20.770 INFO global src/daemon/p2p.h:63 Initializing p2p server...
2018-01-07 11:40:21.014 INFO stacktrace src/common/stack_trace.cpp:120 Exception: boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >
2018-01-07 11:40:21.015 INFO stacktrace src/common/stack_trace.cpp:121 Unwound call stack:
2018-01-07 11:40:21.019 INFO stacktrace src/common/stack_trace.cpp:159 [1] ./monerod:__cxa_throw+0x106 [0x80b816]
2018-01-07 11:40:21.019 INFO stacktrace src/common/stack_trace.cpp:159 [2] ./monerod:void boost::throw_exception<boost::system::system_error>(boost::system::system_error const&)+0x1d1 [0x56abb1]
2018-01-07 11:40:21.019 INFO stacktrace src/common/stack_trace.cpp:159 [3] ./monerod:boost::asio::detail::do_throw_error(boost::system::error_code const&, char const*)+0x55 [0x598cf5]
2018-01-07 11:40:21.019 INFO stacktrace src/common/stack_trace.cpp:159 [4] ./monerod:boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> >::bind(boost::asio::ip::basic_endpoint<boost::asio::ip::tcp> const&)+0x8d [0x5b7f2d]
2018-01-07 11:40:21.019 INFO stacktrace src/common/stack_trace.cpp:159 [5] ./monerod:epee::net_utils::boosted_tcp_server<epee::levin::async_protocol_handler<nodetool::p2p_connection_context_t<cryptonote::cryptonote_connection_context> > >::init_server(unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)+0x35c [0x682a3c]
2018-01-07 11:40:21.019 INFO stacktrace src/common/stack_trace.cpp:159 [6] ./monerod:epee::net_utils::boosted_tcp_server<epee::levin::async_protocol_handler<nodetool::p2p_connection_context_t<cryptonote::cryptonote_connection_context> > >::init_server(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)+0x71 [0x6833f1]
2018-01-07 11:40:21.019 INFO stacktrace src/common/stack_trace.cpp:159 [7] ./monerod:nodetool::node_server<cryptonote::t_cryptonote_protocol_handler<cryptonote::core> >::init(boost::program_options::variables_map const&)+0x17dc [0x684e4c]
2018-01-07 11:40:21.019 INFO stacktrace src/common/stack_trace.cpp:159 [8] ./monerod:daemonize::t_p2p::t_p2p(boost::program_options::variables_map const&, daemonize::t_protocol&)+0x4d9 [0x685df9]
2018-01-07 11:40:21.019 INFO stacktrace src/common/stack_trace.cpp:159 [9] ./monerod:daemonize::t_internals::t_internals(boost::program_options::variables_map const&)+0x553 [0x6866d3]
2018-01-07 11:40:21.019 INFO stacktrace src/common/stack_trace.cpp:159 [10] ./monerod:daemonize::t_daemon::t_daemon(boost::program_options::variables_map const&)+0x38 [0x5853e8]
2018-01-07 11:40:21.019 INFO stacktrace src/common/stack_trace.cpp:159 [11] ./monerod:daemonize::t_executor::run_interactive(boost::program_options::variables_map const&)+0x1d [0x6995bd]
2018-01-07 11:40:21.019 INFO stacktrace src/common/stack_trace.cpp:159 [12] ./monerod:bool daemonizer::daemonize<daemonize::t_executor>(int, char const**, daemonize::t_executor&&, boost::program_options::variables_map const&)+0x184 [0x69c374]
2018-01-07 11:40:21.019 INFO stacktrace src/common/stack_trace.cpp:159 [13] ./monerod:main+0x148f [0x55818f]
2018-01-07 11:40:21.019 INFO stacktrace src/common/stack_trace.cpp:159 [14] /lib/x86_64-linux-gnu/libc.so.6:__libc_start_main+0xf0 [0x7f013424e830]
2018-01-07 11:40:21.019 INFO stacktrace src/common/stack_trace.cpp:159 [15] ./monerod:_start+0x29 [0x560459]
2018-01-07 11:40:21.019 INFO stacktrace src/common/stack_trace.cpp:159
2018-01-07 11:40:21.019 INFO stacktrace src/common/stack_trace.cpp:120 Exception: std::runtime_error
2018-01-07 11:40:21.020 INFO stacktrace src/common/stack_trace.cpp:121 Unwound call stack:
2018-01-07 11:40:21.022 INFO stacktrace src/common/stack_trace.cpp:159 [1] ./monerod:__cxa_throw+0x106 [0x80b816]
2018-01-07 11:40:21.022 INFO stacktrace src/common/stack_trace.cpp:159 [2] ./monerod:daemonize::t_p2p::t_p2p(boost::program_options::variables_map const&, daemonize::t_protocol&)+0x655 [0x685f75]
2018-01-07 11:40:21.022 INFO stacktrace src/common/stack_trace.cpp:159 [3] ./monerod:daemonize::t_internals::t_internals(boost::program_options::variables_map const&)+0x553 [0x6866d3]
2018-01-07 11:40:21.022 INFO stacktrace src/common/stack_trace.cpp:159 [4] ./monerod:daemonize::t_daemon::t_daemon(boost::program_options::variables_map const&)+0x38 [0x5853e8]
2018-01-07 11:40:21.022 INFO stacktrace src/common/stack_trace.cpp:159 [5] ./monerod:daemonize::t_executor::run_interactive(boost::program_options::variables_map const&)+0x1d [0x6995bd]
2018-01-07 11:40:21.022 INFO stacktrace src/common/stack_trace.cpp:159 [6] ./monerod:bool daemonizer::daemonize<daemonize::t_executor>(int, char const**, daemonize::t_executor&&, boost::program_options::variables_map const&)+0x184 [0x69c374]
2018-01-07 11:40:21.023 INFO stacktrace src/common/stack_trace.cpp:159 [7] ./monerod:main+0x148f [0x55818f]
2018-01-07 11:40:21.023 INFO stacktrace src/common/stack_trace.cpp:159 [8] /lib/x86_64-linux-gnu/libc.so.6:__libc_start_main+0xf0 [0x7f013424e830]
2018-01-07 11:40:21.023 INFO stacktrace src/common/stack_trace.cpp:159 [9] ./monerod:_start+0x29 [0x560459]
2018-01-07 11:40:21.023 INFO stacktrace src/common/stack_trace.cpp:159
2018-01-07 11:40:21.025 INFO global src/daemon/core.h:89 Deinitializing core...
2018-01-07 11:40:21.025 INFO global src/daemon/core.h:89 Deinitializing core...
2018-01-07 11:40:21.025 INFO stacktrace src/common/stack_trace.cpp:120 Exception: cryptonote::DB_ERROR*
2018-01-07 11:40:21.026 INFO stacktrace src/common/stack_trace.cpp:121 Unwound call stack:
2018-01-07 11:40:21.028 INFO stacktrace src/common/stack_trace.cpp:159 [1] ./monerod:__cxa_throw+0x106 [0x80b816]
2018-01-07 11:40:21.029 INFO stacktrace src/common/stack_trace.cpp:159 [2] ./monerod:cryptonote::Blockchain::deinit()+0xc48 [0x773508]
2018-01-07 11:40:21.029 INFO stacktrace src/common/stack_trace.cpp:159 [3] ./monerod:cryptonote::core::deinit()+0x25 [0x79e2f5]
2018-01-07 11:40:21.029 INFO stacktrace src/common/stack_trace.cpp:159 [4] ./monerod:daemonize::t_core::~t_core()+0xcb [0x5a47eb]
2018-01-07 11:40:21.029 INFO stacktrace src/common/stack_trace.cpp:159 [5] ./monerod:daemonize::t_internals::t_internals(boost::program_options::variables_map const&)+0x9ef [0x686b6f]
2018-01-07 11:40:21.029 INFO stacktrace src/common/stack_trace.cpp:159 [6] ./monerod:daemonize::t_daemon::t_daemon(boost::program_options::variables_map const&)+0x38 [0x5853e8]
2018-01-07 11:40:21.029 INFO stacktrace src/common/stack_trace.cpp:159 [7] ./monerod:daemonize::t_executor::run_interactive(boost::program_options::variables_map const&)+0x1d [0x6995bd]
2018-01-07 11:40:21.029 INFO stacktrace src/common/stack_trace.cpp:159 [8] ./monerod:bool daemonizer::daemonize<daemonize::t_executor>(int, char const**, daemonize::t_executor&&, boost::program_options::variables_map const&)+0x184 [0x69c374]
2018-01-07 11:40:21.029 INFO stacktrace src/common/stack_trace.cpp:159 [9] ./monerod:main+0x148f [0x55818f]
2018-01-07 11:40:21.029 INFO stacktrace src/common/stack_trace.cpp:159 [10] /lib/x86_64-linux-gnu/libc.so.6:__libc_start_main+0xf0 [0x7f013424e830]
2018-01-07 11:40:21.029 INFO stacktrace src/common/stack_trace.cpp:159 [11] ./monerod:_start+0x29 [0x560459]
2018-01-07 11:40:21.029 INFO stacktrace src/common/stack_trace.cpp:159
2018-01-07 11:40:21.029 ERROR daemon src/daemon/core.h:94 Failed to deinitialize core...
2018-01-07 11:40:21.029 ERROR daemon src/daemon/core.h:94 Failed to deinitialize core...
2018-01-07 11:40:21.029 INFO global src/daemon/protocol.h:77 Stopping cryptonote protocol...
2018-01-07 11:40:21.029 INFO global src/daemon/protocol.h:77 Stopping cryptonote protocol...
2018-01-07 11:40:21.029 INFO global src/daemon/protocol.h:81 Cryptonote protocol stopped successfully
2018-01-07 11:40:21.029 INFO global src/daemon/protocol.h:81 Cryptonote protocol stopped successfully
2018-01-07 11:40:21.030 ERROR daemon src/daemon/main.cpp:293 Exception in main! Failed to initialize p2p server.
2018-01-07 11:40:21.030 ERROR daemon src/daemon/main.cpp:293 Exception in main! Failed to initialize p2p server.
Am I doing anything identifiably wrong on my end or perhaps overlooking something?
Also, I am running Ubuntu 16.04.3 LTS, if anybody is curious.