1.背景
运行任务经常遇到TenantCode: test doesn't exist
,可是我已经通过test用户登录了服务器了,说明test用户是存在的。后来发现通过某个woker是不报错的,但是其他worker报错,实际上各个worker都是创建了test用户的。
2.解决
2.1猜测是缓存的问题,缓存失效导致差不到,因为配置了Caffeine缓存策略
2.2 经过源码溯源,发现是/etc/passwd
文件中没有test用户(只有一个worker节点中是有test用户的,具体原因待查),而代码中是通过查询/etc/passswd
来确认test是否存在的。所以将test用户添加到/etc/passwd
中即可。
/**
* get user list from linux
*
* @return user list
*/
private static List<String> getUserListFromLinux() throws IOException {
List<String> userList = new ArrayList<>();
try (
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(new FileInputStream("/etc/passwd")))) {
String line;
while ((line = bufferedReader.readLine()) != null) {
if (line.contains(":")) {
String[] userInfo = line.split(":");
userList.add(userInfo[0]);
}
}
}
3.引用
linux不使用useradd添加新用户
Caffeine缓存
缓存框架Caffeine探究
springboot集成Caffeine实现本地缓存