To speed up thing when I’m editing the config file I made some super basic scripts and added the directory where I SSH in to the path so hapchk
, hapreset
, hapcmd
, etc are autocompleted and things are done quicker and typo-free.
I’ve been learning a little more of this and that and I’d like to take it a step further: I’m converting the scripts to functions (then source
the file later on) and I want make my hapchk
* command intelligent and have it discover where the configuration file is on its own.
I have several ideas in mind on one end from doing that each time it’s run, and the more efficient way of appending it to the user’s environment file and just use the variable since it’s unlikely to be changed once set anyway.
To discover it I could (1) test if it is in its default location or (2) find it in the systemd
's service but I’d really be more comfortable if there was an official way of (3) asking the current process what was it started with–similar to what php(-fpm) -i | grep -Pi 'Loaded\sConfiguration\sFile(.*)php.ini'
would do for PHP.
haproxy -vv
prints everything down to its feelings and aspirations but not the current source config file. The other options that use related to files take them in as arguments they don’t print them out. I wasn’t that lucky in the master CLI either**. Got any ideas??
The fact that HAProxy runs fully in memory gives me a little hint of the answer but don’t want it to be what I fear it is.
* # cat hapchk
#!/bin/bash
haproxy -f /etc/haproxy/haproxy.cfg -c
** Master CLI output
[root@approuter ~]# hapcmd
HAPROXY STATS SOCKET / MASTER CLI
Type "prompt" and press return/enter to enter interactive mode. The session
will finish after 60min of inactivity or by issuing the "quit" command.
prompt
> help
The following commands are valid at this level:
abort ssl ca-file <cafile> : abort a transaction for a CA file
abort ssl cert <certfile> : abort a transaction for a certificate file
abort ssl crl-file <crlfile> : abort a transaction for a CRL file
add acl [@<ver>] <acl> <pattern> : add an acl entry
add map [@<ver>] <map> <key> <val> : add a map entry (payload supported instead of key/val)
add ssl crt-list <list> <cert> [opts]* : add to crt-list file <list> a line <cert> or a payload
clear acl [@<ver>] <acl> : clear the contents of this acl
clear counters [all] : clear max statistics counters (or all counters)
clear map [@<ver>] <map> : clear the contents of this map
clear table <table> [<filter>]* : remove an entry from a table (filter: data/key)
commit acl @<ver> <acl> : commit the ACL at this version
commit map @<ver> <map> : commit the map at this version
commit ssl ca-file <cafile> : commit a CA file
commit ssl cert <certfile> : commit a certificate file
commit ssl crl-file <crlfile> : commit a CRL file
del acl <acl> [<key>|#<ref>] : delete acl entries matching <key>
del map <map> [<key>|#<ref>] : delete map entries matching <key>
del ssl ca-file <cafile> : delete an unused CA file
del ssl cert <certfile> : delete an unused certificate file
del ssl crl-file <crlfile> : delete an unused CRL file
del ssl crt-list <list> <cert[:line]> : delete a line <cert> from crt-list file <list>
disable agent : disable agent checks
disable dynamic-cookie backend <bk> : disable dynamic cookies on a specific backend
disable frontend <frontend> : temporarily disable specific frontend
disable health : disable health checks
disable server (DEPRECATED) : disable a server for maintenance (use 'set server' instead)
enable agent : enable agent checks
enable dynamic-cookie backend <bk> : enable dynamic cookies on a specific backend
enable frontend <frontend> : re-enable specific frontend
enable health : enable health checks
enable server (DEPRECATED) : enable a disabled server (use 'set server' instead)
get acl <acl> <value> : report the patterns matching a sample for an ACL
get map <acl> <value> : report the keys and values matching a sample for a map
get var <name> : retrieve contents of a process-wide variable
get weight <bk>/<srv> : report a server's current weight
new ssl ca-file <cafile> : create a new CA file to be used in a crt-list
new ssl cert <certfile> : create a new certificate file to be used in a crt-list or a directory
new ssl crlfile <crlfile> : create a new CRL file to be used in a crt-list
operator : lower the level of the current CLI session to operator
prepare acl <acl> : prepare a new version for atomic ACL replacement
prepare map <acl> : prepare a new version for atomic map replacement
set dynamic-cookie-key backend <bk> <k> : change a backend secret key for dynamic cookies
set map <map> [<key>|#<ref>] <value> : modify a map entry
set maxconn frontend <frontend> <value> : change a frontend's maxconn setting
set maxconn global <value> : change the per-process maxconn setting
set maxconn server <bk>/<srv> : change a server's maxconn setting
set profiling <what> {auto|on|off} : enable/disable resource profiling (tasks,memory)
set rate-limit <setting> <value> : change a rate limiting value
set server <bk>/<srv> [opts] : change a server's state, weight, address or ssl
set severity-output [none|number|string]: set presence of severity level in feedback information
set ssl ca-file <cafile> <payload> : replace a CA file
set ssl cert <certfile> <payload> : replace a certificate file
set ssl crl-file <crlfile> <payload> : replace a CRL file
set ssl ocsp-response <resp|payload> : update a certificate's OCSP Response from a base64-encode DER
set ssl tls-key [id|file] <key> : set the next TLS key for the <id> or <file> listener to <key>
set table <table> key <k> [data.* <v>]* : update or create a table entry's data
set timeout [cli] <delay> : change a timeout setting
set weight <bk>/<srv> (DEPRECATED) : change a server's weight (use 'set server' instead)
show acl [@<ver>] <acl>] : report available acls or dump an acl's contents
show activity : show per-thread activity stats (for support/developers)
show backend : list backends in the current running config
show cache : show cache status
show cli level : display the level of the current CLI session
show cli sockets : dump list of cli sockets
show env [var] : dump environment variables known to the process
show errors [<px>] [request|response] : report last request and/or response errors for each proxy
show events [<sink>] [-w] [-n] : show event sink state
show fd [num] : dump list of file descriptors in use or a specific one
show info [desc|json|typed|float]* : report information about the running process
show map [@ver] [map] : report available maps or dump a map's contents
show peers [dict|-] [section] : dump some information about all the peers or this peers section
show pools : report information about the memory pools usage
show profiling [<what>|<#lines>|byaddr]*: show profiling state (all,status,tasks,memory)
show resolvers [id] : dumps counters from all resolvers section and associated name servers
show schema json : report schema used for stats
show servers conn [<backend>] : dump server connections status (all or for a single backend)
show servers state [<backend>] : dump volatile server information (all or for a single backend)
show sess [id] : report the list of current sessions or dump this exact session
show ssl ca-file [<cafile>[:<index>]] : display the SSL CA files used in memory, or the details of a <cafile>, or a single certificate of index <index> of a CA file <cafile>
show ssl cert [<certfile>] : display the SSL certificates used in memory, or the details of a file
show ssl crl-file [<crlfile[:<index>>]] : display the SSL CRL files used in memory, or the details of a <crlfile>, or a single CRL of index <index> of CRL file <crlfile>
show ssl crt-list [-n] [<list>] : show the list of crt-lists or the content of a crt-list file <list>
show ssl ocsp-response [id] : display the IDs of the OCSP responses used in memory, or the details of a single OCSP response
show startup-logs : report logs emitted during HAProxy startup
show stat [desc|json|no-maint|typed|up]*: report counters for each proxy and server
show table <table> [<filter>]* : report table usage stats or dump this table's contents (filter: data/key)
show tasks : show running tasks
show threads : show some threads debugging information
show tls-keys [id|*] : show tls keys references or dump tls ticket keys when id specified
show trace [<module>] : show live tracing state
shutdown frontend <frontend> : stop a specific frontend
shutdown session [id] : kill a specific session
shutdown sessions server <bk>/<srv> : kill sessions on a server
trace [<module>|0] [cmd [args...]] : manage live tracing (empty to list, 0 to stop all)
user : lower the level of the current CLI session to user
help [<command>] : list matching or all commands
prompt : toggle interactive mode with prompt
quit : disconnect
> show info
Name: HAProxy
Version: 2.5.0-f2e0833
Release_date: 2021/11/23
Nbthread: 4
Nbproc: 1
Process_num: 1
Pid: 5090
Uptime: 0d 22h20m19s
Uptime_sec: 80419
Memmax_MB: 0
PoolAlloc_MB: 3
PoolUsed_MB: 3
PoolFailed: 0
Ulimit-n: 60154
Maxsock: 60154
Maxconn: 30000
Hard_maxconn: 30000
CurrConns: 4
CumConns: 3337556
CumReq: 314415
MaxSslConns: 0
CurrSslConns: 9
CumSslConns: 1209776
Maxpipes: 0
PipesUsed: 0
PipesFree: 0
ConnRate: 1
ConnRateLimit: 0
MaxConnRate: 43
SessRate: 1
SessRateLimit: 0
MaxSessRate: 43
SslRate: 1
SslRateLimit: 0
MaxSslRate: 24
SslFrontendKeyRate: 0
SslFrontendMaxKeyRate: 7
SslFrontendSessionReuse_pct: 100
SslBackendKeyRate: 2
SslBackendMaxKeyRate: 17
SslCacheLookups: 36146
SslCacheMisses: 40
CompressBpsIn: 0
CompressBpsOut: 0
CompressBpsRateLim: 0
Tasks: 258
Run_queue: 0
Idle_pct: 99
node: approuter.<something.else>
Stopping: 0
Jobs: 17
Unstoppable Jobs: 1
Listeners: 7
ActivePeers: 0
ConnectedPeers: 0
DroppedLogs: 0
BusyPolling: 0
FailedResolutions: 0
TotalBytesOut: 2311618031
TotalSplicdedBytesOut: 0
BytesOutRate: 8064
DebugCommandsIssued: 0
CumRecvLogs: 0
Build info: 2.5.0-f2e0833
Memmax_bytes: 0
PoolAlloc_bytes: 3950944
PoolUsed_bytes: 3950944
Start_time_sec: 1642604130
Tainted: 0
>