我可以用EC2编写AWS S3 CP启动命令吗

时间:2018-09-05 19:04:38

标签: bash amazon-web-services amazon-ec2

我在亚马逊上有一个AMI,可以根据需要启动。启动时,我要运行“ 3.配置实例详细信息->高级详细信息->用户数据”中提供的一些bash命令。我的命令如下:

#!/bin/bash
sudo yum update -y
aws s3 cp s3://mynotebook notebooks/ --recursive
nohup jupyter notebook

当我访问启动的实例时,硬盘空间被用完,就好像文件被复制了一样,但是我找不到它们!

如果我启动一个实例,然后通过SSH进入计算机并运行这些命令,则硬盘驱动器的大小与第一种方法(按预期)相同,但是文件在笔记本目录中可用,这也是预期的结果。

使用启动命令时,这些文件在哪里?另外,jupyter notebook不会作为nohup命令的一部分启动。我在启动时无法使用这些命令吗?

3 个答案:

答案 0 :(得分:1)

通过第一种方法复制时,文件被root用户复制并拥有。

您有权访问文件吗?如果合适,请使用“ chown”更改文件的所有权。

答案 1 :(得分:1)

问题

用户数据以root用户身份运行,因此这些文件归root所有,并在根目录“ /”(而不是用户的主目录“〜”)中创建。从AWS文档中:

  

作为用户数据输入的脚本将以root用户身份执行,因此请勿在脚本中使用sudo命令。请记住,您创建的所有文件均归root用户所有。如果需要非root用户访问文件,则应在脚本中相应地修改权限。

AWS User Data Documentation

您能做什么?

要访问文件,您有两个选择:

  1. 使用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”。

一旦您验证了问题,让我们继续进行实际的解决;更改下载文件的所有者和位置。

  1. 同时更改要复制(下载)的文件的所有者和位置。

假设您有一个名为 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?

Linux Run Command As Another User

答案 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'