ฉันมีสคริปต์ทุบตีที่ต้องเรียกใช้ในฐานะรูทเพื่อทำงานให้สำเร็จ ในกรณีนี้คือการทำให้ตัวตรวจสอบความถูกต้องถ่ายภาพสแน็ปช็อตของ Helium blockchain
ฉันได้แก้ไขไฟล์ /etc/sudoers เพื่อให้ฉันเรียกใช้สคริปต์นี้ในฐานะรูทได้ มันใช้งานได้ดี
useraccount ALL=(ALL:ALL) NOPASSWD:/home/useraccount/validator_data/snapshotmaker.sh
คำสั่งในสคริปต์มีดังนี้:
sudo docker exec ภาพรวมของเครื่องมือตรวจสอบผู้ตรวจสอบ ใช้ /var/data/$dtt
หลังจากนี้ คำสั่งสร้างไฟล์แบบนี้ '30-10-2021T233752.bin'.
ขั้นตอนต่อไปของฉันคือนำไฟล์นี้และคัดลอกไปยัง IPFS เพื่อให้ฉันแชร์ได้ คำสั่งให้ทำคือ:
ipfs ไฟล์ cp /ipfs/$(ipfs เพิ่ม -Q $localfile) $ip
ในขณะนี้ ฉันได้รับข้อผิดพลาดต่อไปนี้:
ข้อผิดพลาด: ไม่พบที่เก็บ IPFS ใน /root/.ipfs โปรดเรียกใช้: 'ipfs init'
นี่เป็นเพราะมันพยายามเรียกใช้ในฐานะรูทเมื่อการกำหนดค่าอยู่ในบัญชีผู้ใช้ของฉัน
ฉันพยายามสลับบัญชีระหว่างสคริปต์ แต่ดูเหมือนว่าจะหยุดทำงาน
ดังนั้นคำถามของฉันคือวิธีเรียกใช้คำสั่ง IPFS ในฐานะผู้ใช้ดั้งเดิมของฉันจากภายในสคริปต์รูท
สคริปต์ทุบตีของฉัน:
#!/bin/bash
dt=$(วันที่ '+%d-%m-%YT%H%M%S');
dtt="${dt}.bin"
a='/var/data/'
c="${a}${dt}.bin"
เสียงสะท้อน "${c}"
sudo docker exec ภาพรวมของเครื่องมือตรวจสอบผู้ตรวจสอบ ใช้ /var/data/$dtt
localfile="/home/useraccount/validator_data/${dt}.bin"
echo "LocalFile: ${localfile}"
ip=" /Helium/Snapshots/2021/${dt}.bin"
echo "ตำแหน่ง IPFS: ${ip}"
นอน2
ถ้า [ -f "$localfile" ]; แล้ว
echo "$localfile มีอยู่"
sudo chown useraccount $localfile
ฉันเป็นใคร
su - บัญชีผู้ใช้
ฉันเป็นใคร
ipfs ไฟล์ cp /ipfs/$(ipfs เพิ่ม -Q $localfile) $ip
#ipfs ไฟล์ cp /ipfs/$(ipfs เพิ่ม -Q <local-file>) "/Helium/Snapshots/2021/<dest-name>"
อื่น
echo "ไม่มี $localfile"
ไฟ
ผลลัพธ์จะเป็นดังนี้:
/var/data/31-10-2021T005728.bin
ตกลง
LocalFile: /home/useraccount/validator_data/31-10-2021T005728.bin
ตำแหน่ง IPFS: /Helium/Snapshots/2021/31-10-2021T005728.bin
/home/useraccount/validator_data/31-10-2021T005728.bin อยู่
ราก
แล้วมันก็ตาย
ถ้าฉันเอา สุ
บรรทัด จากนั้นฉันได้รับปัญหารูตตามที่กล่าวไว้ที่ด้านบนของโพสต์นี้
หวังว่าจะมีคนช่วยได้