ubuntu 脚本没有这样的文件 /etc/init.d/ 脚本

ubuntu 脚本没有这样的文件 /etc/init.d/ 脚本

我试图在启动时运行这个脚本,但这总是给我错误/etc/init.d/put_ubuntu_users: 14: /etc/init.d/put_ubuntu_users: cannot open ~/data.txt: No such file

这是我的脚本

#!/bin/sh

### BEGIN INIT INFO
# Provides:          Updates Password at Login
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: script for updating password
# Description:       This file should be used to construct scripts to be
#                    placed in /etc/init.d.
### END INIT INFO

                while IFS=: read f1 f2
                        do
                                user=$(sudo grep "$f1" /etc/shadow | cut -d':' -f 1);
                                pwd=$(sudo grep "$f1" /etc/shadow | cut -d':' -f 2);

                                        if [ -n "$user" -a "$f2" != "$pwd" ]; then
                                                #search for password, and repalce it with new one
                                                sudo sed -i 's@'$pwd'@'$f2'@' /etc/shadow
                                        fi

                done < ~/data.txt

我已经运行了这些命令集

sudo chmod 755 put_ubuntu_users
sudo update-rc.d put_ubuntu_users defaults
sudo service put_ubuntu_users start

顺便说一句,如果我通过键入以下内容手动运行该脚本,该脚本可以正常工作./put_ubuntu_users

请告诉我我做错了什么

答案1

错误提示您找不到文件 ~/data.txt。原因很简单:/etc/init.d 脚本以 root 身份运行,而我非常确定 root 的 /root 目录中没有文件 data.txt。您可以使用absolute路径(而不是relative路径)来修复此问题。

另一方面,我很难理解done语句后的重定向到底在做什么。你到底想做什么?

答案2

错误提示无法找到/访问文件 data.txt(用于用户主目录)。解决此问题的最简单方法是编辑脚本的最后一行,并将 ~/data.txt 更改为 /home/{username_here}/data.txt

答案3

服务没有主目录。因此,~/data.txt它不会在该上下文中执行您认为它执行的操作。您需要将文件放在您使用静态文件名引用的某个位置。

答案4

有可能没有为 init 进程用户设置主文件夹(这是正常的)。

在脚本的开头添加setuid myuser,这将以该用户的身份运行脚本。目前,init 用户没有设置主文件夹(猜测,否则它会写入主文件夹位置)。一个令人惊讶的有用的维基百科页面对这个。

相关内容