linux切换nologin用户运行服务时环境变量的设置
遇到问题:
需要切换nologin用户运行服务,同时使得go程序崩溃时可以生成core。
使用sudo -H -u $USER /bin/bash -c "nohup ./server > /dev/null 2>&1 &"。发现设置的环境变量不生效。
问题原因:
shell没有继承当前用户的环境变量,sudo -E -H -u $USER /bin/bash -c,加入-E会尝试继承当前用户的环境变量,经不同系统中尝试后有的成功,有的没有效果。
继续分析后发现交互式非登录shell执行~/.bashrc文件中的命令.在每次执行shell脚本时,都会重新读取这个文件,而新建用户没有这个文件。
uploading-image-927981.png
解决过程:
在用户家目录下添加~/.bashrc文件,并写入环境变量,这里写入了ulimit -c unlimited 和export GOTRACEBACK=crash。
再次执行
sudo -u sysUser sh -c "ulimit -c"
sudo -u sysUser sh -c "echo $GOTRACEBACK"
$GOTRACEBACK设置成功,但是ulimit -c显示无权限,这个问题还有待解决。

浙公网安备 33010602011771号