无法使用 crontab 运行 wine?

无法使用 crontab 运行 wine?

我的计划表:

* * * * * ~/d2gs.sh

我的应用程序:

#!/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 。

答案1

您必须区分“crontab 未启动该进程”和“该进程确实启动但未执行其应有的操作”。并确保该文件是可执行的。

与我假设的相反,使用~incrontab不是问题。整个命令字符串被传递到 shell。

答案2

可能cd ~不起作用(因为波形符扩展不是通用的)。更喜欢cd $HOME它(保证对/bin/sh...的所有实现都做同样的事情).....请记住,POSIX sh(或/bin/sh)通常是不是 bash(你的/bin/sh可能不完全符合 POSIX,但更像“bourne”)!

当然,您可以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进行研究,例如?/tmp/wine.outless

你的cron(和你的 shell 脚本)没有使用你的交互PATH多变的。你应该考虑设置它明确地在你的脚本中(或crontab)。看环境(7)

相关内容