Spaces:
Sleeping
Sleeping
| import pexpect | |
| import os | |
| import sys | |
| def sync_to_server(): | |
| host = "connect.nmb2.seetacloud.com" | |
| port = "26578" | |
| user = "root" | |
| password = "9Dml+WZeqp5b" | |
| local_path = os.getcwd() | |
| remote_path = "/root/book-rec-with-LLMs" | |
| print(f"Syncing to {user}@{host}:{port}...") | |
| # 1. Create remote directory | |
| # ssh -p PORT user@host "mkdir -p remote_path" | |
| cmd_mkdir = f"ssh -p {port} {user}@{host} 'mkdir -p {remote_path}'" | |
| child = pexpect.spawn(cmd_mkdir) | |
| i = child.expect(['password:', 'continue connecting', pexpect.EOF, pexpect.TIMEOUT]) | |
| if i == 1: # verify host key | |
| child.sendline('yes') | |
| child.expect('password:') | |
| if i == 0 or i == 1: | |
| child.sendline(password) | |
| child.expect(pexpect.EOF) | |
| print("Remote directory created.") | |
| # 2. Sync Code (src, scripts, requirements.txt) | |
| # Using scp -r -P PORT ... | |
| # Exclude files handled by .gitignore if using rsync, but scp is simpler for now | |
| # Let's sync folders individually to be safe | |
| # 2. Sync Code | |
| folders = ['src', 'scripts'] | |
| for folder in folders: | |
| print(f"Syncing {folder}...") | |
| cmd_scp = f"scp -r -P {port} {local_path}/{folder} {user}@{host}:{remote_path}/" | |
| child = pexpect.spawn(cmd_scp, timeout=300) | |
| i = child.expect(['password:', 'continue connecting', pexpect.EOF, pexpect.TIMEOUT]) | |
| if i == 1: | |
| child.sendline('yes') | |
| child.expect('password:') | |
| if i == 0 or i == 1: | |
| child.sendline(password) | |
| child.expect(pexpect.EOF) | |
| print(f"Synced {folder}.") | |
| # 3. Sync Data (Only necessary files) | |
| print("Syncing data files (rec/ and books_processed.csv)...") | |
| # Ensure data dir exists | |
| cmd_mkdir_data = f"ssh -p {port} {user}@{host} 'mkdir -p {remote_path}/data'" | |
| child = pexpect.spawn(cmd_mkdir_data) | |
| child.expect('password:') | |
| child.sendline(password) | |
| child.expect(pexpect.EOF) | |
| # Sync books_processed.csv | |
| print("Syncing books_processed.csv (350MB+)...") | |
| cmd_scp_books = f"scp -P {port} {local_path}/data/books_processed.csv {user}@{host}:{remote_path}/data/" | |
| child = pexpect.spawn(cmd_scp_books, timeout=1200) # 20 mins | |
| child.expect('password:') | |
| child.sendline(password) | |
| child.expect(pexpect.EOF) | |
| # Sync rec/ folder | |
| print("Syncing data/rec/ folder (1.5GB+)...") | |
| cmd_scp_rec = f"scp -r -P {port} {local_path}/data/rec {user}@{host}:{remote_path}/data/" | |
| child = pexpect.spawn(cmd_scp_rec, timeout=3600) # 60 mins | |
| child.expect('password:') | |
| child.sendline(password) | |
| child.expect(pexpect.EOF) | |
| print("Sync Completed!") | |
| print("Sync Completed!") | |
| if __name__ == "__main__": | |
| sync_to_server() | |