用systemd管理GreatSQL服務詳解

用systemd管理GreatSQL服務詳解

1.GreatSQL服務文件

官網 greatsql.service 文件

[Unit]
Description=GreatSQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]# 本文省略some limitsUser=mysql
Group=mysql
Type=notify
TimeoutSec=10
PermissionsStartOnly=true
ExecStartPre=/usr/local/GreatSQL-8.0.32-27-Linux-glibc2.28-x86_64/bin/mysqld_pre_systemd
ExecStart=/usr/local/GreatSQL-8.0.32-27-Linux-glibc2.28-x86_64/bin/mysqld $MYSQLD_OPTS
EnvironmentFile=-/etc/sysconfig/mysql
Restart=on-failure
RestartPreventExitStatus=1
Environment=MYSQLD_PARENT_PID=1
PrivateTmp=false

上述服務文件中 MYSQLD_OPTSMYSQLD_PARENT_PID 的用途是什么?TypeExecStart 有什么關系?服務停止的邏輯是什么?TimeoutSec 超時會怎樣?

2.環境變量

[Service]
ExecStart=/data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnf $MYSQLD_OPTS
EnvironmentFile=-/data/conf/greatsql

2.1 MYSQLD_OPTS

MYSQLD_OPTS 是一個特殊的環境變量,用于在啟動時向 MYSQLD 進程傳遞額外的命令行參數。適合需要動態調整參數的場景。

可以通過以下方式設置 MYSQLD_OPTS

  1. systemctl,全局環境變量
# 設置
systemctl set-environment MYSQLD_OPTS="--general_log=1"
# 取消
systemctl unset-environment MYSQLD_OPTS
  1. 服務文件,單個服務環境變量
[Service]
Environment=MYSQLD_OPTS=--general_log=1
EnvironmentFile=-/data/conf/greatsql

2.2 Environment

  1. 服務文件中設置 Environment
[Service]
Environment=LD_PRELOAD=/usr/local/jemalloc-5.3.0/lib/libjemalloc.so
Environment=LD_PRELOAD=/data/svr/greatsql/lib/mysql/libjemalloc.so  #覆蓋之前同名的變量
Environment=  #清空所有環境變量

如果同一變量被重復設置,后續的賦值會覆蓋之前的值。如果將此選項賦值為空字符串,則會重置環境變量列表,之前的所有設置均失效。

  1. 服務文件中設置 EnvironmentFile
[Service]
EnvironmentFile=-/etc/sysconfig/mysql  #-表示忽略文件不存在錯誤
EnvironmentFile=-/data/conf/greatsql
EnvironmentFile=  #清空所有待讀取的文件$ cat /data/conf/greatsql
LD_PRELOAD=/data/svr/greatsql/lib/mysql/libjemalloc.so
LD_LIBRARY_PATH=/data/svr/greatsql/lib
TZ=CST
MYSQLD_OPTS=--general_log=1 --port=4307

EnvironmentFile 可以設置多次,所有匹配的文件均會被讀取。若將此選項賦值為空字符串,則會清空待讀取的文件列表,之前所有設置均失效。

EnvironmentFile 按順序依次讀取,后加載的變量會覆蓋之前的設定,且會覆蓋 Environment 中的同名變量。

Environment、EnvironmentFile 在服務啟動前解析,這些變量會被直接寫入服務的環境變量列表,對所有后續命令(ExecStartPre、ExecStart、ExecStartPost)可見。

如果 EnvironmentFile 指定的文件在運行時動態生成,systemd 會嘗試讀取它,如果文件在讀取時被修改,systemd 會使用最新的內容。

3.啟動

systemd 通過 fork-exec + cgroups 的機制創建并嚴格管理服務進程,確保所有進程均為其子進程。

  • Uses fork() + execve() to spawn the new process:
    • fork(): Creates a child process (a copy of the systemd parent).
    • execve(): Overwrites the child process with the target binary.
  • Assigns the process to a dedicated cgroup
    • Ensures all child processes remain within the same cgroup.
    • Enables resource limits and process tracking.

3.1 Type=simple

[Service]
Type=simple
ExecStart=/data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnf $MYSQLD_OPTS
3.1.1 行為
  • 要求 ExecStart 啟動的是前臺命令**,**其將作為服務的主進程(Main Process)
  • ExecStart 進程創建即啟動成功(即使進程還在初始化或監聽端口未就緒);如果進程崩潰或退出,systemd 會根據 Restart= 規則決定是否重啟
  • 適用于不 fork() 且不依賴其他進程的服務
3.1.2 錯誤示例

如果 ExecStart 啟動的命令以 daemon 模式運行,daemon 進程有一個瞬間退出的中間父進程,對應就是子進程。在子進程退出時,systemd 會將其從監控隊列中踢掉,同時殺掉所有附屬進程(殺進程的方式由 KillMode 控制)。

# KillMode=control-group
$ systemctl start db-4306
$ systemctl status db-4306
● db-4306.service - db-4306 ServerLoaded: loaded (/usr/lib/systemd/system/db-4306.service; enabled; vendor preset: disabled)Active: inactive (dead) since Fri 2025-05-30 11:03:26 CST; 9s agoProcess: 1914 ExecStart=/data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnf --daemonize $MYSQLD_OPTS (code=exited, status=0/SUCCESS)Main PID: 1914 (code=exited, status=0/SUCCESS)Jun 05 11:03:22 dbcluster-165 systemd[1]: Started db-4306 Server.
$ ps aux |grep 4306 |grep -v grep

Type=simple,執行 daemon 命令,默認啟動后馬上會停止。

3.2 Type=forking

[Service]
Type=forking
PIDFile=/data/dbdata/data4306/data/mysql.pid
ExecStart=/data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnf --daemonize $MYSQLD_OPTS
3.2.1 行為
  • 要求 ExecStart 啟動的命令以 daemon 模式運行,服務預期自行 fork() 并退出
  • ExecStart 進程 fork() 出的進程將作為服務的主進程(Main Process),推薦設置 PIDFile 用以正確監控服務主進程,否則通過 cgroup 跟蹤
  • PIDFile 只適合在 Type=forking 模式下使用,如果有設置 PIDFile,systemd 會在 ExecStart 進程退出后立即讀取這個 PIDFile,讀取成功后就認為該服務已經啟動成功,讀取失敗就認為該服務啟動失敗
  • 適用于傳統 Unix 守護進程

以下是 forking 模式下正常啟動的服務

$ systemctl status db-4306
● db-4306.service - db-4306 ServerLoaded: loaded (/usr/lib/systemd/system/db-4306.service; enabled; vendor preset: disabled)Active: active (running) since Thu 2025-05-29 22:28:03 CST; 11s agoProcess: 24262 ExecStart=/data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnf --daemonize $MYSQLD_OPTS (code=exited, status=0/SUCCESS)Main PID: 24342 (mysqld)Tasks: 54CGroup: /system.slice/db-4306.service└─24342 /data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnf --daemonizeMay 29 22:28:01 dbcluster-165 systemd[1]: Starting db-4306 Server...
May 29 22:28:03 dbcluster-165 systemd[1]: Started db-4306 Server.

ExecStart 啟動的進程 PID=24262,且該進程的狀態是已退出,退出狀態碼為0,這個進程是 daemon 類進程創建過程中瞬間退出的中間父進程。Main PID: 24342 (mysqld),這是 systemd 真正監控的服務主進程。

3.2.2 錯誤示例

如果 ExecStart 是一個前臺命令,systemd 會一直等待 ExecStart 啟動的進程作為中間父進程退出,在等待過程中,systemctl start 會一直卡住,直到等待超時而失敗。

$ systemctl status db-4306
● db-4306.service - db-4306 ServerLoaded: loaded (/usr/lib/systemd/system/db-4306.service; enabled; vendor preset: disabled)Active: activating (start) since Fri 2025-05-30 17:25:01 CST; 52s agoMain PID: 27683 (code=exited, status=0/SUCCESS);         : 12646 (mysqld)Tasks: 54CGroup: /system.slice/db-4306.service└─12646 /data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnfMay 30 17:25:01 dbcluster-165 systemd[1]: Starting db-4306 Server...
$ ps axj |grep 4306 |grep -v grep
18266 12640 12640 18266 pts/1    12640 S+       0   0:00 systemctl start db-43061 12646 12646 12646 ?           -1 Ssl    986   0:02 /data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnf$ tailf /var/log/messages |grep db-4306
May 30 17:25:01 dbcluster-165 systemd: Starting db-4306 Server...
May 30 17:26:31 dbcluster-165 systemd: db-4306.service start operation timed out. Terminating.
May 30 17:26:32 dbcluster-165 systemd: Failed to start db-4306 Server.
May 30 17:26:32 dbcluster-165 systemd: Unit db-4306.service entered failed state.
May 30 17:26:32 dbcluster-165 systemd: db-4306.service failed.
May 30 17:26:32 dbcluster-165 systemd: db-4306.service holdoff time over, scheduling restart.
May 30 17:26:32 dbcluster-165 systemd: Stopped db-4306 Server.
May 30 17:26:32 dbcluster-165 systemd: Starting db-4306 Server...

Type=forking,執行前臺命令,在Restart=on-failure場景,啟動超時導致服務反復重啟。

3.3 Type=notify

[Service]
Type=notify
ExecStart=/data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnf $MYSQLD_OPTS
3.3.1 行為
  • 類似 simple,要求 ExecStart 啟動的是前臺命令**,**其將作為服務的主進程(Main Process)
  • 進程支持 sd_notify(),必須正確配置 NotifyAccess 和超時時間
  • 進程在啟動完成、狀態更新、停止通知后必需主動通過 sd_notify() 向 systemd 發送通知
  • 適用于實現更精確的啟動、運行和停止管理服務

3.4 mysqld顯示更多變量

當使用 mysqld_safe 啟動數據庫時,ps 可以看到 mysqld 進程帶有很多變量

$ ps aux |grep 4306
mysql   8787  0.0  0.0 113316  1640 pts/1    S    08:59   0:00 /bin/sh /data/svr/greatsql/bin/mysqld_safe --defaults-file=/data/conf/greatsql4306.cnf
mysql  10424  0.6  3.0 1251912 499724 pts/1  Sl   08:59   0:16 /data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnf --basedir=/data/svr/greatsql --datadir=/data/dbdata/data4306/data --plugin-dir=/data/svr/greatsql/lib/plugin --log-error=/data/logs/error4306.log --open-files-limit=65535 --pid-file=/data/dbdata/data4306/data/mysql.pid --socket=/data/dbdata/data4306/data/mysql.sock --port=4306
$ 

mysqld_safe 處理邏輯如下

cmd="`mysqld_ld_preload_text`$NOHUP_NICENESS"for i in  "$ledir/$MYSQLD" "$defaults" "--basedir=$MY_BASEDIR_VERSION" \"--datadir=$DATADIR" "--plugin-dir=$plugin_dir" "$USER_OPTION"
docmd="$cmd "`shell_quote_string "$i"`
done
cmd="$cmd $args"
# Avoid 'nohup: ignoring input' warning
test -n "$NOHUP_NICENESS" && cmd="$cmd < /dev/null"log_notice "Starting $MYSQLD daemon with databases from $DATADIR"

對于 systemd service,可以添加 ExecStartPre,從 --defaults-file 中獲取需要顯示的變量

[Service]
Type=notify
ExecStartPre=-/bin/bash -c "sed 's/_/-/g; s/ //g; s/#.*//' /data/conf/greatsql4306.cnf |grep -E '^(basedir|datadir|log-error|socket|port)=' |sed 's/^/--/' |tr '\n' ' ' |sed 's/^/MYSQLD_OPTS=/' > /data/conf/greatsql4306.env"
ExecStart=/data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnf $MYSQLD_OPTS
EnvironmentFile=-/data/conf/greatsql4306.env# 啟動后的效果
$ systemctl -l status db-4306
● db-4306.service - db-4306 ServerLoaded: loaded (/usr/lib/systemd/system/db-4306.service; enabled; vendor preset: disabled)Active: active (running) since Fri 2025-06-06 10:27:16 CST; 7h agoMain PID: 12020 (mysqld)Status: "Server is operational"Tasks: 53CGroup: /system.slice/db-4306.service└─12020 /data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnf --port=4306 --basedir=/data/svr/greatsql --datadir=/data/dbdata/data4306/data --pid-file=/data/dbdata/data4306/data/mysql.pid --socket=/data/dbdata/data4306/data/mysql.sock --log-error=/data/logs/error4306.logJun 06 10:27:14 dbcluster-165 systemd[1]: Starting db-4306 Server...
Jun 06 10:27:16 dbcluster-165 systemd[1]: Started db-4306 Server.

3.5 mysqld先于磁盤掛載啟動

對于開機自動啟動,如果磁盤掛載服務啟動較慢,數據庫服務可能會報錯,可以配置數據庫服務延遲啟動

[Unit]
Description=GreatSQL Server
After=network.target local-fs.target  #部分環境After、Requires=local-fs.target無效
Requires=local-fs.target[Service]
Type=notify
Environment=LD_PRELOAD=/usr/local/jemalloc-5.3.0/lib/libjemalloc.so
ExecStartPre=-/usr/bin/sleep 5  #本節采用
ExecStart=/data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnf $MYSQLD_OPTS

服務日志如下

$ systemctl start db-4306
$ systemctl -l status db-4306
● db-4306.service - db-4306 ServerLoaded: loaded (/usr/lib/systemd/system/db-4306.service; enabled; vendor preset: disabled)Active: active (running) since Fri 2025-06-13 23:16:09 CST; 15s agoProcess: 3920 ExecStartPre=/usr/bin/sleep 5 (code=exited, status=0/SUCCESS)Main PID: 4004 (mysqld)Status: "Server is operational"Tasks: 54CGroup: /system.slice/db-4306.service└─4004 /data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnfJun 13 23:16:02 dbcluster-165 systemd[1]: Starting db-4306 Server...
Jun 13 23:16:02 dbcluster-165 sleep[3920]: ERROR: ld.so: object '/usr/local/jemalloc-5.3.0/lib/libjemalloc.so' from LD_PRELOAD cannot be preloaded: ignored.
Jun 13 23:16:09 dbcluster-165 systemd[1]: Started db-4306 Server.
$ lsof -p 4004 |grep -i jem
mysqld  4004 mysql  mem       REG                8,2  10479400    846986 /usr/local/jemalloc-5.3.0/lib/libjemalloc.so.2

systemctl status中 ERROR 的原因:執行 ExecStartPre 會加載服務的環境變量,此時由于磁盤掛載暫未完成,導致 so 文件無法加載(這一條 ERROR 可以忽略)。只要延遲足夠,在磁盤掛載完成后再執行 ExecStart,就能正常加載配置的 so 文件。

4.停止

4.1 systemctl stop 邏輯

  1. 執行 ExecStop (設置了才執行,否則進入第2步)
    1. ExecStop 成功終止進程,systemd 檢測到進程已退出,不再發送 SIGTERM
    2. ExecStop 未終止進程,例如 ExecStop 超時(TimeoutStopSec),ExecStop 命令與停止進程無關,進入第2步
  2. 發送 SIGTERM(默認,KillSignal=SIGTERM),優雅退出
    1. SIGTERM 成功終止進程,服務退出
    2. SIGTERM 未終止進程,例如 SIGTERM 超時(TimeoutStopSec),進入第3步
  3. 發送 SIGKILL(默認,SendSIGKILL=yes),強制終止

4.2 systemctl stop 執行超時

對于版本升級等場景,通常會設置 innodb_fast_shutdown=0,此時關閉數據庫會比較慢,如果 TimeoutStopSec 過小,可能導致 ExecStop、SIGTERM 超時,觸發 SIGKILL。

  1. 數據庫以 systemd 服務運行
[Service]
Type=notify
ExecStart=/data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnf
Restart=on-failure
  1. ExecStop 超時,SIGTERM 超時,對應的服務日志
$ date;systemctl stop db-4306
Tue Jun  3 15:37:19 CST 2025
$ systemctl status db-4306
● db-4306.service - db-4306 ServerLoaded: loaded (/usr/lib/systemd/system/db-4306.service; enabled; vendor preset: disabled)Active: failed (Result: signal) since Tue 2025-06-03 15:37:21 CST; 36s agoProcess: 26645 ExecStop=/usr/bin/sleep 60 (code=killed, signal=TERM)Process: 26322 ExecStart=/data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnf (code=killed, signal=KILL)Main PID: 26322 (code=killed, signal=KILL)Status: "Server shutdown in progress"Jun 03 15:37:01 dbcluster-165 systemd[1]: Starting db-4306 Server...
Jun 03 15:37:03 dbcluster-165 systemd[1]: Started db-4306 Server.
Jun 03 15:37:19 dbcluster-165 systemd[1]: Stopping db-4306 Server...
Jun 03 15:37:20 dbcluster-165 systemd[1]: db-4306.service stopping timed out. Terminating.
Jun 03 15:37:21 dbcluster-165 systemd[1]: db-4306.service stop-sigterm timed out. Killing.
Jun 03 15:37:21 dbcluster-165 systemd[1]: db-4306.service: main process exited, code=killed, status=9/KILL
Jun 03 15:37:21 dbcluster-165 systemd[1]: Stopped db-4306 Server.
Jun 03 15:37:21 dbcluster-165 systemd[1]: Unit db-4306.service entered failed state.
Jun 03 15:37:21 dbcluster-165 systemd[1]: db-4306.service failed.

systemctl stop 超時(ExecStop、SIGTERM),服務會被 SIGKILL。systemd 認為是一個預期的行為,不會觸發重啟。

4.3 命令行執行 shutdown 超時

  1. 數據庫以 systemd 服務運行(同上)
  2. 命令行執行 shutdown
greatsql> shutdown;

systemd 對所有通過它管理的服務都實施完整的生命周期控制。當執行 shutdown 時,信號傳遞鏈:shutdown --> 數據庫服務 --> systemd 服務管理器。systemd 會監控整個停止過程。

  1. 對應服務日志
Jun  3 17:32:23 dbcluster-165 systemd: db-4306.service stop-sigterm timed out. Killing.
Jun  3 17:32:24 dbcluster-165 systemd: db-4306.service: main process exited, code=killed, status=9/KILL
Jun  3 17:32:24 dbcluster-165 systemd: Unit db-4306.service entered failed state.
Jun  3 17:32:24 dbcluster-165 systemd: db-4306.service failed.
Jun  3 17:32:24 dbcluster-165 systemd: db-4306.service holdoff time over, scheduling restart.
Jun  3 17:32:24 dbcluster-165 systemd: Stopped db-4306 Server.
Jun  3 17:32:24 dbcluster-165 systemd: Starting db-4306 Server...
Jun  3 17:32:25 dbcluster-165 systemd: Started db-4306 Server.

SIGTERM 超時,發送 SIGKILL 強制終止,進程退出原因是 Unclean signal。在 Restart=on-failure 場景,等待 RestartSec(默認100ms)后重啟。

命令行 shutdown 超時(SIGTERM),服務會被 SIGKILL,之后會觸發重啟。

4.4 禁用 systemd 的默認信號

如果要禁用 systemd 的默認停止行為,可以參考如下設置

[Service]
ExecStop=/path/to/your-stop-script  # 必須確保此腳本終止所有進程
KillMode=none                       # 禁用systemd的默認終止行為
TimeoutStopSec=0                    # 避免超時干預

5.重啟

Configures whether the service shall be restarted when the service process exits, is killed, or a timeout is reached. The service process may be the main service process, but it may also be one of the processes specified with ExecStartPre=, ExecStartPost=, ExecStop=, ExecStopPost=, or ExecReload=. When the death of the process is a result of systemd operation (e.g. service stop or restart), the service will not be restarted. Timeouts include missing the watchdog “keep-alive ping” deadline and a service start, reload, and stop operation timeouts.

5.1 Restart 的取值

Restart settings/Exit causesnoalwayson-successon-failureon-abnormalon-aborton-watchdog
Clean exit code or signalXX
Unclean exit codeXX
Unclean signalXXXX
TimeoutXXX
WatchdogXXXX

A clean exit means an exit code of 0, or one of the signals SIGHUP, SIGINT, SIGTERM or SIGPIPE, and additionally, exit statuses and signals specified in SuccessExitStatus=.

5.2 命令行執行 restart 無法重啟

  1. 數據庫以 systemd 服務運行(同上)
  2. 命令行執行 restart
greatsql> restart;
ERROR 3707 (HY000): Restart server failed (mysqld is not managed by supervisor process).

原因:沒有設置相關的監控進程(https://dev.mysql.com/doc/refman/8.0/en/restart.html)

  1. 查看運行中數據庫進程的 MYSQLD_PARENT_PID
$ ps aux |grep 4306 |grep -v grep
mysql  21055  0.5  3.1 2635940 505712 ?      Ssl  Jun03   7:31 /data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnf
$ cat /proc/21055/environ |tr '\0' '\n'
LANG=en_US.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
NOTIFY_SOCKET=/run/systemd/notify
HOME=/home/mysql
LOGNAME=mysql
USER=mysql
SHELL=/bin/bash
  1. 設置 MYSQLD_PARENT_PID
  • mysqld_safe,默認將 mysqld_safe 的PID設置為監控進程
  #echo "Running mysqld: [$cmd]"cmd="env MYSQLD_PARENT_PID=$$ $cmd"eval "$cmd"
  • systemd,需在服務文件添加
[Service]
Environment=MYSQLD_PARENT_PID=1
  1. 重啟數據庫生效
$ systemctl restart db-4306
$ ps aux |grep 4306 |grep -v grep
mysql  11050  0.9  3.0 2635676 500004 ?      Ssl  15:53   0:04 /data/svr/greatsql/bin/mysqld --defaults-file=/data/conf/greatsql4306.cnf
$ cat /proc/11050/environ |tr '\0' '\n' |grep MYSQLD_PARENT_PID
MYSQLD_PARENT_PID=1greatsql> restart;
Query OK, 0 rows affected (0.00 sec)

如果要求不重啟數據庫就能執行 restart 命令,可通過 gdb 動態修改環境變量,gdb 會短時間阻塞數據庫

$ gdb -p 21055(gdb) call putenv("MYSQLD_PARENT_PID=1")
$2 = 0
(gdb) detach
Detaching from program: /data/svr/GreatSQL-8.0.32-26-Linux-glibc2.17-x86_64/bin/mysqld, process 21055
(gdb) quitgreatsql> restart;
Query OK, 0 rows affected (0.00 sec)

clone 同樣需要設置 MYSQLD_PARENT_PID,才能自動重啟。

5.3相關參數

ReStartSec:重啟條件滿足后等多久自動重啟

StartLimitInterval、StartLimitBurst:限制指定時間內(StartLimitInterval)重啟的次數(StartLimitBurst)

RestartPreventExitStatus:指定某些退出狀態碼或信號不重啟。GreatSQL服務建議設置為1,在遇到嚴重錯誤時不重啟實例,需人工介入處理

RestartForceExitStatus:強制將某些退出狀態碼或信號重啟。比如 Restart=no,RestartForceExitStatus=16,則不依賴自動重啟,但命令行執行 restart 可正常重啟實例

6.總結

  • 合理設置 Type 和 ExecStart
  • 建議設置一個較大的 TimeoutStopSec,避免 ExecStop 或者 SIGTERM 超時
  • Clone 和命令行 restart 需要設置 MYSQLD_PARENT_PID
  • 建議設置 ReStartSec、StartLimitInterval 和 StartLimitBurst 限制重啟頻率
  • 可以設置 ExecStartPre和EnvironmentFile,添加 ps 需要顯示的變量

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87777.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87777.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87777.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【AIGC】深度剖析AI倫理:強化隱私防線,推動算法公平性的核心議題

博客主頁&#xff1a; [小????????] 本文專欄: AIGC 文章目錄 &#x1f34a;1 人工智能興起背后的倫理及道德風險1.1 算法偏見與歧視1.2 數據隱私侵權1.3 透明度受限1.4 決策失衡1.5 AI生成內容的危險性 &#x1f34a;2 建構AIGC倫理觀&#xff1a;實現人機共創的永…

WebSocket技術全面解析:從歷史到實踐

WebSocket技術全面解析&#xff1a;從歷史到實踐 WebSocket作為一種全雙工通信協議&#xff0c;徹底改變了Web應用的實時交互模式。它于2011年被IETF正式標準化為RFC 6455&#xff0c;解決了傳統HTTP協議在實時通信中的根本缺陷。本文將深入探討WebSocket的發展歷程、技術原理、…

單用戶模式、緊急模式、救援模式有什么區別

文章目錄 **一、單用戶模式&#xff08;Single User Mode&#xff09;****功能與用途****啟動特點****進入方式** **二、緊急模式&#xff08;Emergency Mode&#xff09;****功能與用途****啟動特點****進入方式** **三、救援模式&#xff08;Rescue Mode&#xff09;****功能…

【大模型入門】訪問GPT的API

目錄 0 前言 免費訪問GPT的API Windows下環境變量的設置 1 非流式輸出 1.1 使用requests庫 1.2 使用OpenAI庫 2 流式輸出 2.1 使用requests庫 2.2 使用OpenAI庫 3 使用OpenAI庫與GPT聊天&#xff08;存儲對話歷史版&#xff09; 4 嵌入向量embeddings 4.1 創建嵌入向…

Jenkins 部署腳本

java版 #!/bin/bashAPP_NAME"springboot-demo-0.0.1-SNAPSHOT" JAR_PATH"/home/package/target/${APP_NAME}.jar" LOG_PATH"/home/package/logs/app.log"# 查找并停止舊進程 PID$(ps aux | grep "$APP_NAME.jar" | grep -v grep | awk…

NV183NV185美光固態閃存NV196NV201

美光固態閃存技術深度解析&#xff1a;NV183、NV185、NV196與NV201系列 一、技術架構與核心參數對比 1. 制程工藝與容量布局 美光NV183/NV185/NV196/NV201系列采用176層3D NAND技術&#xff0c;通過垂直堆疊提升存儲密度。其中&#xff1a; NV183&#xff1a;主打256GB容量段…

基于單片機PWM控制逆變電源設計資料集:全面掌握逆變電源設計精髓

基于單片機PWM控制逆變電源設計資料集&#xff1a;全面掌握逆變電源設計精髓 去發現同類優質開源項目:https://gitcode.com/ 項目介紹 在現代電子技術中&#xff0c;逆變電源的設計與應用占據了至關重要的位置。今天&#xff0c;我將為您介紹一個優秀的開源項目——基于單片…

Docker Buildx 構建多架構鏡像(Redis、Mysql、Java8、Nginx)

目標 ARM64 麒麟電腦無法直接拉取 Redis 鏡像&#xff0c;需在 Windows x86 電腦上通過 多架構構建工具&#xff08;如 Docker Buildx&#xff09; 生成適配 ARM64 的 Redis 鏡像&#xff0c;再打包傳輸到目標設備。 一、核心問題&#xff1a;跨架構鏡像兼容性 直接保存的 redi…

代理IP的安全陷阱:如何避免中間人攻擊與IP池污染?

在跨境業務、數據采集等場景中&#xff0c;代理IP已成為剛需工具。然而&#xff0c;其隱藏的安全風險卻常被忽視——輕則泄露隱私&#xff0c;重則導致賬號封禁、數據劫持甚至金融損失。本文將深入剖析兩大核心風險&#xff08;中間人攻擊與IP池污染&#xff09;&#xff0c;并…

深入理解大語言模型中的超參數:Temperature、Top-p 與更多

隨著大語言模型&#xff08;LLM&#xff09;如 GPT、Claude、Gemini 的廣泛應用&#xff0c;調優生成文本的質量與風格成為開發者和研究人員的重要課題。其中&#xff0c;超參數&#xff08;Hyperparameters&#xff09;如 temperature 和 top_p 扮演了核心角色&#xff0c;影響…

譯碼器Multisim電路仿真匯總——硬件工程師筆記

目錄 74LS實現二線三線譯碼器 1 74LS139D和74LS138D基礎知識 1.1 74LS139D 二線四線譯碼器 1.1.1 功能特點 1.1.2 引腳功能 1.1.3 工作原理 1.1.4 應用場景 1.1.5 使用方法 1.1.6 注意事項 1.6.7 邏輯真值表 1.2 74LS138D 3線8線譯碼器 1.2.1 功能特點 1.2.2 引腳…

國產 OFD 標準公文軟件數科 OFD 閱讀器:OFD/PDF 雙格式支持,公務辦公必備

各位辦公軟件小達人們&#xff0c;今天咱來聊聊數科OFD閱讀器&#xff01; 軟件下載地址安裝包 這軟件啊&#xff0c;是基于咱國家自主OFD標準的版式閱讀軟件&#xff0c;主要用來閱讀和處理OFD/PDF電子文件&#xff0c;還能用于公務應用擴展。它支持打開和瀏覽OFD/PDF格式的文…

vue中的toRef

在 Vue 中&#xff0c; toRef 函數用于將響應式對象的屬性轉換為一個獨立的 ref 對象&#xff0c;同時保持與原始屬性的關聯。其參數格式及用法如下&#xff1a; toRef 的參數說明 1. 參數 1&#xff1a;源對象&#xff08;必須&#xff09; - 類型&#xff1a; Object &…

暖通鍋爐的智能管控:物聯網實現節能又舒適?

暖通鍋爐系統在建筑供暖、工業供熱等領域扮演著重要角色&#xff0c;其運行效率和能源消耗直接關系到用戶的使用體驗和成本支出。傳統的暖通鍋爐管理方式往往依賴人工操作和經驗判斷&#xff0c;存在能耗高、調節不靈活、舒適性差等問題。隨著物聯網技術的發展&#xff0c;暖通…

PHP:從入門到進階的全面指南

PHP&#xff08;Hypertext Preprocessor&#xff09;作為一種廣泛使用的開源腳本語言&#xff0c;尤其適用于 Web 開發并可嵌入 HTML 中。自誕生以來&#xff0c;PHP 憑借其簡單易學、功能強大以及豐富的生態系統&#xff0c;成為了眾多網站和 Web 應用程序開發的首選語言之一。…

EXCEL 基礎函數

1、絕對引用、相對引用 1.1相對引用 相對引用&#xff0c;這是最常見的引用方式。復制單元格公式時&#xff0c;公式隨著引用單元格的位置變化而變化 例如在單元格內輸入sum(B2:C2)&#xff0c;然后下拉填充柄復制公式。 可以看到每個單元格的公式不會保持sum(B2:C2)&#…

升級到MySQL 8.4,MySQL啟動報錯:io_setup() failed with EAGAIN

在升級到MySQL 8.4后&#xff0c;許多用戶在啟動數據庫時遇到了一種常見錯誤&#xff1a;“io_setup() failed with EAGAIN”。本文將深入探討該錯誤的原因&#xff0c;并提供詳細的解決方案。錯誤分析錯誤描述當你啟動MySQL時&#xff0c;可能會在日志文件中看到以下錯誤信息&…

【ECharts Y 軸標簽優化實戰:從密集到稀疏的美觀之路】

ECharts Y 軸標簽優化實戰&#xff1a;從密集到稀疏的美觀之路 &#x1f4cb; 文章背景 在開發數據可視化模塊時&#xff0c;我們遇到了一個常見但棘手的圖表顯示問題&#xff1a;ECharts 圖表的 Y 軸標簽過于密集&#xff0c;影響了用戶體驗和數據的可讀性。本文將詳細記錄整個…

【鋰電池剩余壽命預測】GRU門控循環單元鋰電池剩余壽命預測(Pytorch完整源碼和數據)

目錄 效果一覽程序獲取程序內容代碼分享效果一覽 程序獲取 獲取方式一:文章頂部資源處直接下載:【鋰電池剩余壽命預測】GRU門控循環單元鋰電池剩余壽命預測(Pytorch完整源碼和數據) 獲取方式二:訂閱電池建模專欄獲取電池系列更多文件。 程序內容 1.【鋰電池剩余壽命預測…

Minstrel:多智能體協作生成結構化 LangGPT 提示詞

一、項目概述 Minstrel 是一個基于 LangGPT 框架的多智能體系統&#xff0c;自動生成結構化、人格化的提示詞。它通過多個協作代理&#xff0c;提升提示詞的準確性、多樣性和靈活性&#xff0c;適合非 AI 專家使用 (github.com)。 二、問題動機 當前 LLM 提示設計經驗依賴強…