在CentOS 6 的cron/crontab中使用wine运行exe程序
几个月前服务器的OS从Ubuntu 10.04转为CentOS 6.3,装好wine后手动运行shell脚本可以正常运行指定的exe程序(脚本和Ubuntu中的一样),于是就直接修改crontab定时自动运行该脚本。
最近却才发现该exe并未自动执行过一次(大汗,该exe作用为备份数据库、清空过时备份),于是立刻去查找问题原因,初步推测为以下几点:
1.crontab配置出错
原来的配置为每2小时运行一次,改为每3分钟运行一次。查看crontab日志(/var/log/cron 系列日志),发现的确是每3分钟运行一次crontab配置中的脚本(日志中有记录)。在图形界面运行该脚本,功能正常。结论为crontab配置并未出错,脚本确实是每2小时运行一次。
2.wine运行该exe程序失败
在shell脚本中将wine运行exe的正常输出及异常输出重定向到指定文件(&>> 追加到文件末尾)。于是发现初步原因:
wine: '/' is not owned by you, refusing to create a configuration directory there
奇怪的错误,明明已经在该用户的界面运行过winecfg,自动生成了wine的配置文件夹的啊。于是google一下(PS:我那时候用百度只搜到Ubuntu中文论坛中的“wine: '/home/username' is not owned by you, 不让用呀!”解决方法是检查该用户主目录所属和权限是否正确),发现简单的解决方法是执行前设置一个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:我的CentOS 6.3的crontabs版本为1.10-33.el6,Ubuntu 10.04的cron为3.0pl1-106ubuntu5
PS2:当正确设置了HOME而未设置WINEPREFIX时,wine不会报错。这是我写此文章时再次测试才发现的,所以“教授别人时也能提升自己”。
本文为原创内容,转载请注明出处。
在CentOS 6 的cron/crontab中使用wine运行exe程序的更多相关文章
- 如何在Linux中使用Firejail运行应用程序
有时您可能希望使用在不同环境中未经过良好测试的应用程序,但您必须使用它们.在这种情况下,关注系统的安全性是正常的.在Linux中可以做的一件事是在沙箱中使用应用程序. “沙盒”是在有限环境中运行应用程 ...
- 在windows中:双击运行Python程序、后台运行Python程序
在windows中:双击运行Python程序.后台运行Python程序 安装Python解释器的windows环境,如果双击运行*.py的文件,会闪退.怎样避免闪退呢? 我们用python的日志输出程 ...
- 在 Sublime Text 2 中编译和运行 Java 程序,以及输出中文出错问题解决办法
Sublime Text 2 是我最喜欢用来编码的文本编辑器,如果你尝试使用后相信你也会喜欢上它的.在这篇文章中我们将讨论如何在 Sublime Text 2 中编译和运行 Java 程序. 第一步: ...
- "无法启动程序,因为计算机中丢失*.dll” 运行exe错误解决方法
笔者把编译生成的win32 Release exe文件复制到另外一台电脑上,却发现程序不能运行,报错如下: 报错提示缺失动态链接库pcl_common_release.dll,那为什么在编译生成的电脑 ...
- Python中四种运行其他程序的方式
原文地址:http://blog.csdn.net/jerry_1126/article/details/46584179 在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在 ...
- Python黑科技 | Python中四种运行其他程序的方式
在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程,可以使用win32proc ...
- J2EE项目中后台定时运行的程序
转自:http://www.2cto.com/kf/201311/260676.html 在开发J2EE项目中,有时候需要在后台定时执行一些代码. 比如定时对web数据建立倒排索引.定时发送邮件.定时 ...
- C#中调用Windows系统服务exe程序的工具类与重启服务的流程
场景 使用C#编写的Windows服务程序,在Winform中进行调用. 常用工具类方法检测服务是否存在或者安装,获取服务状态,启动服务,停止服务的方法. 以在Winform中重启服务为例. 注: 博 ...
- Ubuntu中使用终端运行Hadoop程序
接上一篇<Ubuntu Kylin系统下安装Hadoop2.6.0> 通过上一篇,Hadoop伪分布式基本配好了. 下一步是运行一个MapReduce程序,以WordCount为例: 1. ...
随机推荐
- aliyun EC2配置利用filezilla配置ftp服务
项目需要在阿里云EC2虚拟主机上配置ftp服务器,看了阿里云的教程可以使用filezilla配置,但一直遇到了一些问题.现记录一些步骤,避免以后出现类似问题. 1安装filezilla server ...
- 五、vue状态管理模式vuex
一.vuex介绍 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 即data中属性同时有一 ...
- ipsec-tools安装教程
ipsec-tools最新版本为0.8.2,此处以0.7.3版本为例说明安装和使用过程.可参考ipsec-howto. 安装步骤 ipsec-tools依赖于linux2.6版本内核,在安装ipsec ...
- python3操作sqlserver,查询数据统计导出csv
import pymssql #导入sqlserver连接池模块 import csv #导出csv文件使用模块 conn=pymssql.connect('服务器ip','用户名','密码','数据 ...
- mybatis generator 双击创建失败
https://coding.imooc.com/learn/questiondetail/20460.html 用的下面这个方法
- C++ code:低级编程
1 C编程 所谓低级编程,是相对于面向对象或基于对象的抽象层次更高的高级编程而言,就是: (1)不用C++STL的资源库,尽量减少内在的创建.调用.分配等的开销: (2)对程序管辖的内存进行直接操作访 ...
- tensorflow-作用域
变量名字由两部分组成:scope/变量name. name 参数才是对象的唯一标识. 1.tf.name_scope() Graph中保存着一个属性_name_stack(string类型),_nam ...
- 2016 版 Laravel 系列入门教程
2016 版 Laravel 系列入门教程 (1) - (5) http://www.golaravel.com/post/2016-ban-laravel-xi-lie-ru-men-jiao-ch ...
- .NetCore Linux环境下安装InfluxDB以及配置设置
Linux下安装 确定需要安装的版本,我的linux是干净的,所以我需要先安装wget yum -y install wget 下载安装 wget https://dl.influxdata.com/ ...
- HTML5练习3
1.输入问题,判断答案,按钮倒计时 主要代码: <!doctype html> <html> <head> <meta charset="utf-8 ...