Lỗi khi sync giữa 2 server bằng lệnh shell_exec trong PHP

Discussion in 'Hỏi Đáp Kỹ Thuật' started by Thanh Nguyen, Jan 8, 2022.

  1. Thanh Nguyen

    Thanh Nguyen Bang Chúng

    Chào các cụ. Chả là e có 1 site download, vừa rồi bị report đến server storage đã phải chuyển nhà 1 lần rồi. Nay e muốn tạo 1 server backup cho con storage kia. Yêu cầu là khi nào upload file lên server storage chính thì sẽ đồng thời sync sang server backup

    Trên server backup e viết lệnh trong PHP ntn:

    $out_put = shell_exec('rsync -avzhe ssh root@storage_server_id:/var/www/html/domain/uploads/filename /var/www/html/domain/uploads/ 2>&1');

    Khi chạy nó báo lỗi: Host key verification failed. rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] rsync error: unexplained error (code 255) at io.c(235) [Receiver=3.1.2]

    e đã tạo ssh-keygen trên server backup thành công. Bằng chứng là nếu e chạy trực tiếp lệnh: rsync -avzhe ssh root@storage_server_id:/var/www/html/domain/uploads/filename /var/www/html/domain/uploads/ trên server backup thì nó chạy thành công và không yêu cầu mật khẩu của server storage chính

    Các cụ có kinh nghiệm vụ này hướng dẫn e phát
     
  2. thitgaluoc

    thitgaluoc Hương Chủ

    crontab cho nó chạy xem sao bác
     
  3. Thanh Nguyen

    Thanh Nguyen Bang Chúng

    E chưa chạy crontab với cả cũng không muốn chạy crontab cho cái này. Nhưng e có chạy lệnh trực tiếp trên vps thì chạy đc. nhưng khi chạy qua php bằng shell_exec thì không chạy đc
     
  4. congloi

    congloi Sơ Nhập Giang Hồ

    bác phải shell_exec('cd /root/') trước lệnh rsync php kia nữa, vì khi bác chạy trên ssh terminal thì lệnh đang ở /root/

    hoặc cd /thư_mục_bác_tạo_file_keygen

    :)
     
  5. thitgaluoc

    thitgaluoc Hương Chủ

    đây bác oi
     

    Attached Files:

  6. Thanh Nguyen

    Thanh Nguyen Bang Chúng

    Ko phải bác. Chạy trực tiếp trên VPS e cũng chạy ở thư mục web chứ có chạy ở root đâu
    --- Double Post Merged, Jan 8, 2022, Original Post Date: Jan 8, 2022 ---
    Thế h làm cách để gọi lệnh rsync từ PHP không bác
     
  7. thitgaluoc

    thitgaluoc Hương Chủ

    bác thử crontab đi, hoặc tống nó vào file .sh rồi chạy, hoặc tạo systemd daemon cho nó chạy như service
     
  8. Thanh Nguyen

    Thanh Nguyen Bang Chúng

    Tks bác. Để e thử xem
     
  9. t-cdn

    t-cdn Tân Thủ Thôn

    bác chạy trực tiếp bằng user root à? bác thử chạy trực tiếp vs user execute php xem được ko?
     
  10. Thanh Nguyen

    Thanh Nguyen Bang Chúng

    Lúc chạy trực tiếp trên VPS thì e chạy bằng user root luôn. Còn lúc thực thi qua PHP thì không biết nó dùng user nào =))
     
  11. sincos

    sincos Bang Chúng

    rsync -i path_to_private_key
     
  12. Thanh Nguyen

    Thanh Nguyen Bang Chúng

    cụ thể đc không cụ. E sửa lại thành
    rsync -i /root/.ssh/id-rsa.pub -avzhe ssh root@xxxx:/var/www/html/domain/uploads/files.exe /var/www/html/domain/uploads/ 2>&1

    thì nó báo "Unexpected remote arg..."