首页 > 解决方案 > Cloudflare DDNS 使用 API v4 重复 sh 脚本,在单个 sh 脚本中有多个 A 记录,但失败

问题描述

我正在尝试使用 Cloudflare API v4 在我的服务器上设置 DDNS。但我是脚本 .sh 文件的新手。我希望在一个 .sh 文件中更新多个 DNS 记录。

我从网上得到了一个脚本(script1.sh):

NEW_IP=`curl -s http://ipv4.icanhazip.com`
CURRENT_IP=`cat /Users/foo/Desktop/cloudflare/current_ip.txt`

if [ "$NEW_IP" = "$CURRENT_IP" ]
then
        echo "No Change in IP Adddress"
else
curl -X PUT "https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records/{dns_record_id}" \
     -H "X-Auth-Email: {my_email}" \
     -H "X-Auth-Key: {global_api_key}" \
     -H "Content-Type: application/json" \
     --data '{"type":"A","name":"{domain_name}","content":"'$NEW_IP'","ttl":1,"proxied":true}' 
echo $NEW_IP > /Users/foo/Desktop/cloudflare/current_ip.txt
fi

上面的脚本适用于单个 DNS 记录更新,而不是如下所示的多个记录更新 (script2.sh):

NEW_IP=`curl -s http://ipv4.icanhazip.com`
CURRENT_IP=`cat /Users/foo/Desktop/cloudflare/current_ip.txt`

if [ "$NEW_IP" = "$CURRENT_IP" ]
then
        echo "No Change in IP Adddress"
else
#domain-one
curl -X PUT "https://api.cloudflare.com/client/v4/zones/{zone_id_for_domain_one}/dns_records/{dns_record_id_for_domain_one_record_one}" \
     -H "X-Auth-Email: {my_email}" \
     -H "X-Auth-Key: {global_api_key}" \
     -H "Content-Type: application/json" \
     --data '{"type":"A","name":"domain-one.com","content":"'$NEW_IP'","ttl":1,"proxied":true}'
curl -X PUT "https://api.cloudflare.com/client/v4/zones/{zone_id_for_domain_one}/dns_records/{dns_record_id_for_domain_one_record_two}" \
     -H "X-Auth-Email: {my_email}" \
     -H "X-Auth-Key: {global_api_key}" \
     -H "Content-Type: application/json" \
     --data '{"type":"A","name":"subdomain.domain-one.com","content":"'$NEW_IP'","ttl":1,"proxied":true}'
#domain-two
curl -X PUT "https://api.cloudflare.com/client/v4/zones/{zone_id_for_domain_two}/dns_records/{dns_record_id_for_domain_two_record}" \
     -H "X-Auth-Email: {my_email}" \
     -H "X-Auth-Key: {global_api_key}" \
     -H "Content-Type: application/json" \
     --data '{"type":"A","name":"domain-two.com","content":"'$NEW_IP'","ttl":1,"proxied":true}'
echo $NEW_IP > /Users/foo/Desktop/cloudflare/current_ip.txt
fi

你能帮忙解释和解决问题吗?请告诉我脚本中有什么问题。谢谢!

[编辑]我运行一次sh /Users/foo/Desktop/script-name.sh,对于第一个示例(script1.sh),没关系;对于第二个示例(script2.sh),返回-bash: fork: Resource temporarily unavailable. 当我使用自动运行脚本cron时,结果相同。

标签: shcloudflare

解决方案


每个curl请求完成,都需要添加&&&继续以下功能。

更多解释在这里

NEW_IP=`curl -s http://ipv4.icanhazip.com`
CURRENT_IP=`cat /Users/foo/Desktop/cloudflare/current_ip.txt`

if [ "$NEW_IP" = "$CURRENT_IP" ]
then
        echo "No Change in IP Adddress"
else
#domain-one
curl -X PUT "https://api.cloudflare.com/client/v4/zones/{zone_id_for_domain_one}/dns_records/{dns_record_id_for_domain_one_record_one}" \
     -H "X-Auth-Email: {my_email}" \
     -H "X-Auth-Key: {global_api_key}" \
     -H "Content-Type: application/json" \
     --data '{"type":"A","name":"domain-one.com","content":"'$NEW_IP'","ttl":1,"proxied":true}' &
curl -X PUT "https://api.cloudflare.com/client/v4/zones/{zone_id_for_domain_one}/dns_records/{dns_record_id_for_domain_one_record_two}" \
     -H "X-Auth-Email: {my_email}" \
     -H "X-Auth-Key: {global_api_key}" \
     -H "Content-Type: application/json" \
     --data '{"type":"A","name":"subdomain.domain-one.com","content":"'$NEW_IP'","ttl":1,"proxied":true}' &
#domain-two
curl -X PUT "https://api.cloudflare.com/client/v4/zones/{zone_id_for_domain_two}/dns_records/{dns_record_id_for_domain_two_record}" \
     -H "X-Auth-Email: {my_email}" \
     -H "X-Auth-Key: {global_api_key}" \
     -H "Content-Type: application/json" \
     --data '{"type":"A","name":"domain-two.com","content":"'$NEW_IP'","ttl":1,"proxied":true}'
echo $NEW_IP > /Users/foo/Desktop/cloudflare/current_ip.txt
fi

推荐阅读