NTP服务: Cannot find user ID 106 && active (exited) 启动失败解决方法

出现的问题

公司使用树莓派当作开发板,使用ntp服务作为时间同步工具,之前一直运行正常,今天突然不能正常使用,查看状态如下:
在这里插入图片描述
绿色字体可以看出服务启动异常,正常应该是acitve(running)

解决方法

查看 /lib 目录的权限,如果是700,则修改为755,再次启动服务,发现可以执行成功。

当然,我这个解决方法不一定适用您遇到的问题,所以我接下来会梳理解决该问题流程,或许对您可以有所启发。

解决问题的流程

  • step1 加日志
    修改/etc/ntp.conf文件内容如下,加入日志文件路径。
    在这里插入图片描述
    重启服务sudo service ntp restart,服务依旧启动失败,打开日志文件内容如下:
    在这里插入图片描述
    可以看见出错原因就是Cannot find user ID 106

  • step 2 查找用户信息

    • 使用id ntp命令
      在这里插入图片描述
      可以看到ntp服务的user id就是106,此时怀疑是不是保存这些内容的文件有问题
    • 查看相关文件信息
      在这里插入图片描述
      文件的权限,及文件内容都正确(这里判断内容正确是因为与其它ntp服务正常运行的开发板输出内容一致)。
      到这步,卡了很久。去ntp官网,Stack Overflow,Google都没搜到,于是尝试查看ntp源码,找到报错的原因。
  • step 3 查看ntp服务源码
    GitHub地址
    代码片段如图:
    在这里插入图片描述
    可以看出来,是函数**getpwuid()**返回空指针导致的,接下来就来测试该函数。

  • step 4 测试**getpwuid()**函数
    编写的测试代码:

#include <pwd.h>
#include <sys/types.h>
main()
{
    struct passwd *user;
    user= getpwuid(106);
    printf("name:%s\n", user->pw_name);
    printf("uid:%d\n", user->pw_uid);
    printf("home:%s\n", user->pw_dir);
}

交叉编译之后放到开发板上运行,输出如下:

pi@raspberrypi:~ $ ./testgetpwuid.out 
name:ntp
uid:106
home:/home/ntp

居然正确执行了!!!! 难道是用户出问题了?

  • step 5 尝试删除ntp用户,重新添加
    userdel ntp && useradd ntp
    此时,ntp的user id等都发生了变化

    pi@raspberrypi:~ $  id ntp
    uid=1001(ntp) gid=1001(ntp) groups=1001(ntp)
    

    重启服务,依然失败!
    难道和运行环境有关系?

  • step 6 切换到ntp用户下

步骤如下:

pi@raspberrypi:~ $ passwd ntp
passwd: You may not view or modify password information for ntp.
pi@raspberrypi:~ $ sudo passwd ntp
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
pi@raspberrypi:~ $ sudo su ntp
Cannot execute /bin/bash: Permission denied  

Cannot execute /bin/bash: Permission denied 解决办法

注意:按照解决办法,修改了/lib权限,从700改为755

ntp@raspberrypi:/home/pi$ sudo service ntp restart

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for ntp: 
ntp is not in the sudoers file.  This incident will be reported.

ntp is not in the sudoers file 解决办法

root@raspberrypi:~# su - ntp
No directory, logging in with HOME=/
ntp@raspberrypi:/$ sudo mkdir /home/ntp
ntp@raspberrypi:/$ /home/pi/testgetpwuid.out 
name:ntp
uid:1001   --> id变了是因为step 5
home:/home/ntp

发现还是执行成功了!
再次重启服务:
在这里插入图片描述
AMAZING!!!成功了

step 7 总结
梳理步骤,逐步还原,发现只要/lib目录权限修改为755(或者说让其它用户也有访问权限),服务就可以启动成功,看一下ntp服务的依赖:
在这里插入图片描述
可以看见,依赖了/lib目录!!!

思路坎坷,所幸解决了~~~

————————————————
版权声明:本文为CSDN博主「風居住的街道_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_27727147/article/details/107496107

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值