Simplify init script (part 2)

This commit is contained in:
Alexey Milovidov 2020-11-26 07:54:18 +03:00
parent 747453b008
commit 36151b9e54
2 changed files with 17 additions and 52 deletions

View File

@ -67,26 +67,6 @@ if uname -mpi | grep -q 'x86_64'; then
fi fi
is_running()
{
pgrep --pidfile "$CLICKHOUSE_PIDFILE" $(echo "${PROGRAM}" | cut -c1-15) 1> /dev/null 2> /dev/null
}
wait_for_done()
{
timeout=$1
attempts=0
while is_running; do
attempts=$(($attempts + 1))
if [ -n "$timeout" ] && [ $attempts -gt $timeout ]; then
return 1
fi
sleep 1
done
}
die() die()
{ {
echo $1 >&2 echo $1 >&2
@ -171,17 +151,7 @@ restart()
forcestop() forcestop()
{ {
local EXIT_STATUS ${CLICKHOUSE_GENERIC_PROGRAM} stop --force --pid-path "${CLICKHOUSE_PIDDIR}"
EXIT_STATUS=0
echo -n "Stop forcefully $PROGRAM service: "
kill -KILL $(cat "$CLICKHOUSE_PIDFILE")
wait_for_done
echo "DONE"
return $EXIT_STATUS
} }
@ -261,16 +231,16 @@ main()
service_or_func restart service_or_func restart
;; ;;
condstart) condstart)
is_running || service_or_func start service_or_func start
;; ;;
condstop) condstop)
is_running && service_or_func stop service_or_func stop
;; ;;
condrestart) condrestart)
is_running && service_or_func restart service_or_func restart
;; ;;
condreload) condreload)
is_running && service_or_func restart service_or_func restart
;; ;;
initdb) initdb)
initdb initdb
@ -293,17 +263,7 @@ main()
status() status()
{ {
if is_running; then ${CLICKHOUSE_GENERIC_PROGRAM} status --pid-path "${CLICKHOUSE_PIDDIR}"
echo "$PROGRAM service is running"
exit 0
else
if is_cron_disabled; then
echo "$PROGRAM service is stopped";
else
echo "$PROGRAM: process unexpectedly terminated"
fi
exit 3
fi
} }

View File

@ -783,17 +783,20 @@ namespace
return pid; return pid;
} }
int stop(const fs::path & pid_file) int stop(const fs::path & pid_file, bool force)
{ {
UInt64 pid = isRunning(pid_file); UInt64 pid = isRunning(pid_file);
if (!pid) if (!pid)
return 0; return 0;
if (0 == kill(pid, 15)) /// Terminate int signal = force ? SIGKILL : SIGTERM;
fmt::print("Sent termination signal.\n", pid); const char * signal_name = force ? "kill" : "terminate";
if (0 == kill(pid, signal))
fmt::print("Sent {} signal to process with pid {}.\n", signal_name, pid);
else else
throwFromErrno("Cannot send termination signal", ErrorCodes::SYSTEM_ERROR); throwFromErrno(fmt::format("Cannot send {} signal", signal_name), ErrorCodes::SYSTEM_ERROR);
size_t try_num = 0; size_t try_num = 0;
constexpr size_t num_tries = 60; constexpr size_t num_tries = 60;
@ -869,6 +872,7 @@ int mainEntryClickHouseStop(int argc, char ** argv)
desc.add_options() desc.add_options()
("help,h", "produce help message") ("help,h", "produce help message")
("pid-path", po::value<std::string>()->default_value("/var/run/clickhouse-server"), "directory for pid file") ("pid-path", po::value<std::string>()->default_value("/var/run/clickhouse-server"), "directory for pid file")
("force", po::value<bool>()->default_value(false), "Stop with KILL signal instead of TERM")
; ;
po::variables_map options; po::variables_map options;
@ -887,7 +891,7 @@ int mainEntryClickHouseStop(int argc, char ** argv)
{ {
fs::path pid_file = fs::path(options["pid-path"].as<std::string>()) / "clickhouse-server.pid"; fs::path pid_file = fs::path(options["pid-path"].as<std::string>()) / "clickhouse-server.pid";
return stop(pid_file); return stop(pid_file, options["force"].as<bool>());
} }
catch (...) catch (...)
{ {
@ -940,6 +944,7 @@ int mainEntryClickHouseRestart(int argc, char ** argv)
("config-path", po::value<std::string>()->default_value("/etc/clickhouse-server"), "directory with configs") ("config-path", po::value<std::string>()->default_value("/etc/clickhouse-server"), "directory with configs")
("pid-path", po::value<std::string>()->default_value("/var/run/clickhouse-server"), "directory for pid file") ("pid-path", po::value<std::string>()->default_value("/var/run/clickhouse-server"), "directory for pid file")
("user", po::value<std::string>()->default_value("clickhouse"), "clickhouse user") ("user", po::value<std::string>()->default_value("clickhouse"), "clickhouse user")
("force", po::value<bool>()->default_value(false), "Stop with KILL signal instead of TERM")
; ;
po::variables_map options; po::variables_map options;
@ -962,7 +967,7 @@ int mainEntryClickHouseRestart(int argc, char ** argv)
fs::path config = fs::path(options["config-path"].as<std::string>()) / "config.xml"; fs::path config = fs::path(options["config-path"].as<std::string>()) / "config.xml";
fs::path pid_file = fs::path(options["pid-path"].as<std::string>()) / "clickhouse-server.pid"; fs::path pid_file = fs::path(options["pid-path"].as<std::string>()) / "clickhouse-server.pid";
if (int res = stop(pid_file)) if (int res = stop(pid_file, options["force"].as<bool>()))
return res; return res;
return start(user, executable, config, pid_file); return start(user, executable, config, pid_file);
} }