首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能用crontab来管理葡萄酒吗?

不能用crontab来管理葡萄酒吗?
EN

Unix & Linux用户
提问于 2017-11-29 20:34:01
回答 2查看 771关注 0票数 0

我的crontab:

代码语言:javascript
复制
* * * * * ~/d2gs.sh

我的申请:

代码语言:javascript
复制
#!/bin/sh

#
# D2GS
#

# Go to the directory
cd ~

# Run the applications
if ! ps aux | pgrep "D2GS"; then
    wine "C:/D2GS/D2GS.exe" > /dev/null 2>&1 &
fi

crontab没有启动进程。这很奇怪,因为我可以成功地手动运行~/d2gs.sh。

EN

回答 2

Unix & Linux用户

发布于 2017-11-29 22:40:38

您必须区分“crontab没有启动进程”和“流程确实启动但没有做它应该做的事情”。并确保文件是可执行的。

与我所设想的相反,~crontab中的使用并不是一个问题。整个新命令字符串被传递给一个shell。

票数 3
EN

Unix & Linux用户

发布于 2017-11-29 22:46:18

cd ~可能无法工作(因为倾斜展开不是通用的)。更喜欢cd $HOME而不是它(保证对/bin/sh的所有实现都这样做……).请记住,POSIX sh (或/bin/sh)通常不是bash (而且您的/bin/sh可能不是完全兼容POSIX,而是更多的“伯恩”-like)!

当然,您可以在脚本中添加类似pwd > /dev/stderr的内容(用于调试目的)。

wine通常需要一个X11服务器来显示窗口。而从cron启动的程序通常没有任何X11服务器或终端。因此,wine可能无法启动(从cron工作开始)。您可能需要为DISPLAY设置一些克利卜变量。但是您可以使用Xvfb,请参阅这里

最后,pgrep(1)是扫描过程。要么使用ps aux | grep "D2GS",要么学习如何单独使用pgrep

我建议使用echo something > /dev/stderr或更好的echo打印件(1) (在脚本中使用合适的重定向记录器(1),至少用于调试目的(在几个地方)。

至少在调试阶段,我不会将wine、-s、stderr和stdout重定向到/dev/null。您不能(至少在调试期间暂时)编写wine "C:/D2GS/D2GS.exe" >> /tmp/wine.out 2>&1代码,并使用一些寻呼机(如less )查看/tmp/wine.out吗?

您的cron (和shell脚本)没有使用交互式PATH变量PATH变量。您应该考虑在脚本(或crontab)中显式地设置它。见环境(7)

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/407820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档