程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> 在CentOS6.5 的cron/crontab中使用wine運行exe程序

在CentOS6.5 的cron/crontab中使用wine運行exe程序

編輯:PHP綜合

幾個月前服務器的OS從Ubuntu 10.04轉為CentOS6.5,安裝好wine後手動運行shell腳本可以正常運行指定的exe程序(腳本和Ubuntu中的一樣),於是就直接修改crontab定時自動運行該腳本。

最近卻才發現該exe並未自動執行過一次(該exe作用的作用是反編譯apk包獲取apk信息),於是立刻去查找問題原因,初步推測為以下幾點:

1.crontab配置出錯

在另一台服務器運行是正常的,現在在這個上面就一直出錯,使用命令行去執行該腳本也是可以正常執行,生成xml文件。

2.wine運行該exe程序失敗

在shell腳本中將wine運行exe的正常輸出及異常輸出重定向到指定文件(&>> 追加到文件末尾)。於是發現初步原因:

wine: '/' is not owned by you, refusing to create a configuration directory there

奇怪的錯誤,明明在shell腳本中將wine運行exe的正常輸出”解決方法是檢查該用戶主目錄所屬和權限是否正確,發現簡單的解決方法是執行前設置一個wine變量——$WINEPREFIX,具體方法是

export WINEPREFIX=/home/username/.wine

env WINEPREFIX=/home/username/.wine

這只會在本shell及其子shell中生效。終於可以執行wine……查看日志發現wine雖然可以運行,但是繼續報錯;exe程序輸出的中文也變成了?。

我選擇先解決exe輸出中文亂碼的問題,也就是字符編碼問題。在shell腳本中輸出一下

echo $LANG &>> yourlog

於是發現手動運行與自動運行的區別,手動是zh_CN.UTF-8,自動是en_US.UTF-8……好辦,相同的處理方法,執行前設置變量LANG為zh_CN.UTF-8,成功輸出中文。

再解決wine的報錯

err:menubuilder:write_freedesktop_mime_type_entry error writing file //.local/share/mime/packages/x-wine-extension-cpl.xml

這個時候我開始懷疑CentOS的crontab執行指定用戶的命令時缺少了一些必要的初始化操作。再次google,在wine的官網發現類似的問題

err:menubuilder:write_freedesktop_mime_type_entry error writing file /home/mark/.local/share/mime/packages/x-wine-extension-cpl.xml

仔細比較,mark的該xml文件是在自己的主目錄下的!輸出一下主目錄

echo $HOME &>> yourlog

手動是/home/username,自動是……空,無語問蒼天。相同的處理方法,執行前設置變量LANG為/home/username,成功解決wine的報錯。

結語

至此,可以確認CentOS的crontab執行指定用戶的命令時缺少了一些必要的初始化操作,例如用戶語言,用戶主目錄,命令路徑(PATH)等等。我只能確定whoami是輸出正確的(大汗),各位若遇到類似的環境變量初始化問題(不只是wine),大可打開/etc/profile和/etc/profile.d/中看看CentOS究竟會在用戶登陸時做了那些設置。但還有一些變量如HOME、WINEPREFIX未找到初始化的語句,各位如知道請留言。

由於crontab為後台運行,不提供圖形界面,所以如果exe程序帶圖形界面,wine語句前可能必須加上”DISPALY=:0 “

DISPLAY=:0 wine ***.exe >> yourlog.log

PS1:我的CentOS6.5的crontabs版本為1.10-33.el6,Ubuntu 10.04的cron為3.0pl1-106ubuntu5

PS2:當正確設置了HOME而未設置WINEPREFIX時,wine不會報錯。

*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved