我在亚马逊上有一个AMI,可以根据需要启动。启动时,我要运行“ 3.配置实例详细信息->高级详细信息->用户数据”中提供的一些bash命令。我的命令如下:
#!/bin/bash
sudo yum update -y
aws s3 cp s3://mynotebook notebooks/ --recursive
nohup jupyter notebook
当我访问启动的实例时,硬盘空间被用完,就好像文件被复制了一样,但是我找不到它们!
如果我启动一个实例,然后通过SSH进入计算机并运行这些命令,则硬盘驱动器的大小与第一种方法(按预期)相同,但是文件在笔记本目录中可用,这也是预期的结果。
使用启动命令时,这些文件在哪里?另外,jupyter notebook不会作为nohup命令的一部分启动。我在启动时无法使用这些命令吗?
答案 0 :(得分:1)
通过第一种方法复制时,文件被root用户复制并拥有。
您有权访问文件吗?如果合适,请使用“ chown”更改文件的所有权。
答案 1 :(得分:1)
问题
用户数据以root用户身份运行,因此这些文件归root所有,并在根目录“ /”(而不是用户的主目录“〜”)中创建。从AWS文档中:
作为用户数据输入的脚本将以root用户身份执行,因此请勿在脚本中使用sudo命令。请记住,您创建的所有文件均归root用户所有。如果需要非root用户访问文件,则应在脚本中相应地修改权限。
您能做什么?
要访问文件,您有两个选择:
要验证导致问题的原因是文件的权限,请更改为root用户并检查根目录中的文件。
首先,使用常规用户(ec2-user,ubuntu等)将ssh转到计算机:
ssh -i key.pem ec2-user@<your_ec2_public_dns_or_ip>
然后,更改为root用户:
sudo su
您的终端提示符将更改为“#”,指示切换。切换到根目录:
cd /
现在,列出所有文件和目录及其权限:
ls -al
验证您的文件在那里。另外,请注意所有者的名称“ root”。
一旦您验证了问题,让我们继续进行实际的解决;更改下载文件的所有者和位置。
假设您有一个名为 ec2-user 的普通用户,请将脚本修改为以下内容:
#!/bin/bash
sudo yum update -y
# Change to the user's home directory
cd /home/ec2-user
# A directory called notebooks will be created in the current directory; ie, /home/ec2-user
aws s3 cp s3://mynotebook notebooks/ --recursive
# Change the owner and group of the notebooks' directory and all its children
chown --recursive ec2-user:ec2-user notebooks
# Run jupyter as the ec2-user
runuser -l ec2-user -c 'nohup jupyter notebook'
# TODO Extract the ec2-user value to a variable
资源
Use chown to set the ownership of all a folder's subfolders and files?
答案 2 :(得分:1)
对已接受的答案进行小调整-更改目录和复制文件对我不起作用,我将脚本修改为以下有效的脚本
#!/bin/bash
yum update -y
aws s3 cp s3://notebooks /home/ec2-user/notebooks/ --recursive
chown --recursive ec2-user:ec2-user /home/ec2-user/notebooks/
runuser -l ec2-user -c 'nohup jupyter notebook'