scp
  • nohup
  • 2016-05-15 69 views 0 likes 
    0
    ##!/bin/bash 
    FILE=$1; 
    /usr/bin/nohup /usr/bin/scp -i /var/www/.ssh/XXX -P XXXXX "$FILE" [email protected]:/dir1/dir2/ & 
    exit 
    

    這是我的shellcript。這是由PHP叫:scp與nohup在後臺不會工作

    $sh = "/var/www/shdir/script.sh"; 
    $param = '/path/to/file.mp4'; 
    $exec = $sh . ' "' . $param . '"'; 
    shell_exec($exec); 
    

    這個workes罰款,但這些文件,我想轉讓,太大,以處理在幾秒鐘內,所以我想用nohup的在shell腳本運行SCP-過程在背景中。 scp運行,但不在後臺運行。我不知道爲什麼:/

    感謝您的幫助!

    +0

    您的PHP代碼嚴重不安全。我可以幫你修理外殼,但這並不會降低危險性。 –

    +0

    (......或者,而不是:這並不會讓你從PHP調用它的方式危險性更低)。 –

    回答

    0

    沒有必要爲nohup這裏 - 剛剛脫離從TTY直接所有防衛和安全使用disown

    #!/bin/bash 
    file=$1; 
    /usr/bin/scp -B \ 
        -i /var/www/.ssh/XXX \ 
        -P XXXXX \ 
        "$file" [email protected]:/dir1/dir2/ \ 
        </dev/null >/dev/null 2>&1 & 
    disown 
    

    注:

    • -B(批)選項SCP啓用。
    • 標準輸入,輸出和錯誤都被重定向到/dev/null(雖然你可能會做的更好後兩者重定向到一個日誌文件,而調試)
    • 家當與#!開始,不##!
    • disown用於去除從shell的作業表

    更大的問題過程是一個連接字符串使用shell_exec()。啓動子進程的正確方式是直接指定每個argv數組條目。與使用shell不同(與shell_exec()一樣),這可以防止變量執行任意代碼(想想一個名爲/uploads/evil-$(rm -rf $HOME)'$(rm -rf $HOME)'.mp4的文件;如果將該名稱替換爲作爲代碼執行的字符串,那麼您將會遇到糟糕的一天,即使您嘗試使用引號來保護它)。

    相關問題