作者: FutureDB 原文来源:https://tidb.net/blog/19683371
1、问题描述
在 Linux 系统使用 tidb 用户安装好 tiup,以及使用 tiup 命令搭建好集群后,并配置好 tiup 环境变量并 source 后,tiup 命令可以正常使用,但是第二次登录时从 root 用户切换到 tidb 用户使用时出现:bash: tiup: command not found。
2、相关配置和问题复现
从 root 用户切换到 tidb 用户,使用 tiup 命令报错:bash: tiup: command not found。
[root@BigData01 ~]# su tidb
[tidb@BigData01 root]$ tiup cluster display tidb-test
bash: tiup: command not found
复制代码
查看 tidb 用户下的.bash_profile 配置,发现已经对 tiup 命令配置了环境变量,并且搭建的时候已经 source。
[tidb@BigData01 root]$ cat ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH=/home/tidb/.tiup/bin:$PATH
export PD_ADDR=http://127.0.0.1:2379 && tiup ctl:v7.5.1 pd
export PATH
复制代码
3、问题原因及解决方法
其实这里的原因主要在于:su tidb 这种方式切换用户,并不算登录行为。该方式会 source ~/.bashrc,而不会 source ~/.bash_profile,因此在 ~/.bash_profile 中配置的环境变量没有生效,会出现 tiup 命令找不到的情况。
可以通过如下命令确认,发现确实没有登录。
[tidb@BigData01 ~]$ shopt login_shell
login_shell off
复制代码
为了解决该问题,我们从 root 用户使用 su - tidb 或者 su -l tidb 切换到 tidb 用户,这种方式会登录 tidb 用户。具体操作如下:
方法一:
[root@BigData01 ~]# su - tidb
Last login: Mon Apr 1 08:42:28 CST 2024 on pts/2
Last failed login: Mon Apr 1 08:45:27 CST 2024 on pts/2
There were 4 failed login attempts since the last successful login.
Starting component `ctl`: /home/tidb/.tiup/components/ctl/v7.5.1/ctl pd
[tidb@BigData01 ~]$ shopt login_shell
login_shell on
复制代码
方法二:
[root@BigData01 ~]# su -l tidb
Last login: Mon Apr 1 08:46:00 CST 2024 on pts/2
Starting component `ctl`: /home/tidb/.tiup/components/ctl/v7.5.1/ctl pd
[tidb@BigData01 ~]$ shopt login_shell
login_shell on
复制代码
之后,我们再使用 tiup 命令查询下集群,此时 tiup 命令可以正常使用。
[tidb@BigData01 ~]$ tiup cluster display tidb-test
tiup is checking updates for component cluster ...
Starting component `cluster`: /home/tidb/.tiup/components/cluster/v1.14.1/tiup-cluster display tidb-test
Cluster type: tidb
Cluster name: tidb-test
Cluster version: v7.5.1
Deploy user: tidb
SSH type: builtin
Dashboard URL: http://192.168.93.128:2379/dashboard
Grafana URL: http://192.168.93.128:3000
ID Role Host Ports OS/Arch Status Data Dir Deploy Dir
-- ---- ---- ----- ------- ------ -------- ----------
192.168.93.128:9093 alertmanager 192.168.93.128 9093/9094 linux/x86_64 Up /tidb-data/alertmanager-9093 /tidb-deploy/alertmanager-9093
192.168.93.128:8300 cdc 192.168.93.128 8300 linux/x86_64 Up /tidb-data/cdc-8300 /tidb-deploy/cdc-8300
192.168.93.128:3000 grafana 192.168.93.128 3000 linux/x86_64 Up - /tidb-deploy/grafana-3000
192.168.93.128:2379 pd 192.168.93.128 2379/2380 linux/x86_64 Up|UI /tidb-data/pd-2379 /tidb-deploy/pd-2379
192.168.93.129:2379 pd 192.168.93.129 2379/2380 linux/x86_64 Up /tidb-data/pd-2379 /tidb-deploy/pd-2379
192.168.93.130:2379 pd 192.168.93.130 2379/2380 linux/x86_64 Up|L /tidb-data/pd-2379 /tidb-deploy/pd-2379
192.168.93.128:9090 prometheus 192.168.93.128 9090/12020 linux/x86_64 Up /tidb-data/prometheus-9090 /tidb-deploy/prometheus-9090
192.168.93.128:4000 tidb 192.168.93.128 4000/10080 linux/x86_64 Up - /tidb-deploy/tidb-4000
192.168.93.129:9000 tiflash 192.168.93.129 9000/8123/3930/20170/20292/8234 linux/x86_64 Up /tidb-data/tiflash-9000 /tidb-deploy/tiflash-9000
192.168.93.130:9000 tiflash 192.168.93.130 9000/8123/3930/20170/20292/8234 linux/x86_64 Up /tidb-data/tiflash-9000 /tidb-deploy/tiflash-9000
192.168.93.128:20160 tikv 192.168.93.128 20160/20180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160
192.168.93.129:20160 tikv 192.168.93.129 20160/20180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160
192.168.93.130:20160 tikv 192.168.93.130 20160/20180 linux/x86_64 Up /tidb-data/tikv-20160 /tidb-deploy/tikv-20160
Total nodes: 13
复制代码
4、总结
总体而言,从 root 用户切换为 tidb 用户之后使用 tiup 命令时报“bash: tiup: command not found”的主要原因是:采用 su tidb 方式切换不算实际登录,导致 tidb 用户下~/.bash_profile 里面的环境变量没有生效,从而导致配置到环境变量里的 tiup 命令无法使用。解决方式:即采用 su - tidb 或者 su -l tidb 进行切换,这两种方式会切换时,会自动 source ~/.bash_profile 使其生效,从而配置在用户环境变量里的 tiup 可以使用。
评论