简介:
我正在寻找最好的方法来创建文件,该文件包括一个脚本,其中包含没有依赖性的所有内容(无需从外部源下载内容)。 可以与EC2实例/模板中的userdata功能一起使用。
问题:
根据脚本中定义的变量创建文件以添加systemctl服务。 (在这里:$REPOSITORYLINK
)
我的服务文件:
[Unit]
Description=pblv
After=docker.service
[Service]
Type=simple
ExecStart=/usr/bin/docker run -d --rm -p 80:9090 $REPOSITORYLINK:latest
[Install]
WantedBy=multi-user.target
为了能够使用这些行来创建新文件,我想到了将它们转换为base64的想法。
#!/bin/bash
export REPOSITORYLINK=thelink.repo.com #Defining the parameter
echo ICAgIFtVbml0XQogICAgRGVzY3JpcHRpb249cGJsdgogICAgQWZ0ZXI9ZG9ja2VyLnNlcnZpY2UKICAgIAogICAgW1NlcnZpY2VdCiAgICBUeXBlPXNpbXBsZQogICAgRXhlY1N0YXJ0PS91c3IvYmluL2RvY2tlciBydW4gLWQgLS1ybSAtcCA4MDo5MDkwICRSRVBPU0lUT1JZTElOSzpsYXRlc3QKICAgIAogICAgW0luc3RhbGxdCiAgICBXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldA== | base64 --decode > /etc/systemd/system/myservice.service
如预期的那样,这将照原样复制base64解码的字符串,而不替换$REPOSITORYLINK
的值。
这只是一个例子,我知道我可以使用Docker --restart always
就可以做到这一点,而无需为此创建服务,但这不是问题。
我正在寻找一种更简单的方法,而无需添加hacky代码。
解决方案的一部分:
cat > /etc/systemd/system/myservice.service <<ENDOFCONTENT
[Unit]
Description=pblv
After=docker.service
[Service]
Type=simple
ExecStart=/usr/bin/docker run -d --rm -p 80:9090 $REPOSITORYLINK:latest
[Install]
WantedBy=multi-user.target
ENDOFCONTENT
这是可行的,但是我想要更通用的东西,如果我的文件包含ENDOFCONTENT
...
如何将解决方案与base64哈希结合在一起?
编辑:我不想添加任何搜索并替换变量值的循环。我需要内部解决方案。