system() 在 cron 作业中无法在 C 中工作

system() not working in C on cron job

当程序是 运行 来自 cron 作业时,system() 功能不起作用,但当我手动执行程序时它工作正常。

C代码:

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){

char command[256];

strcpy(command, "mpg123 /home/vlad/MIA/Alarm/test.mp3");
printf("Commnd Executed");
system(command);

return 0;
}

Crontab 文件:

*/1 * * * * /home/vlad/MIA/Alarm/test >> /home/vlad/MIA/debug_test.txt

Cron 作业 运行 具有一组有限的环境变量。

要查看环境,您可以像这样创建一个临时 cron 作业:

* * * * * printenv > cron-env

最有可能的罪魁祸首是 $PATH 变量。 mpg123 命令可能在交互式 shell 中的 $PATH 目录中,但不在提供给 cron 作业的默认 $PATH 中。

UPDATE :我看到 mpg321 包提供了 mpg123 命令(在 Ubuntu 上),大概会安装它作为 /usr/bin/mpg123。但我不知道该命令的作用,或者您如何判断它没有 运行。调试它的第一步应该是尝试 运行 一个简单的命令,这样你就可以清楚地判断它是否 运行。请确定,您正在将 crontab 提供给 crontab 命令,是吗?如果是这样,它应该出现在 crontab -l.

的输出中

这似乎是一个组合,cron 作业不是 运行,我在 Keith Thompson 的帮助下弄明白了,而且 cron 作业需要一些常态变量。我所做的工作是从具有所需变量的脚本中启动 C 程序。

.sh 文件

 #/bin/bash 

##Needed to have cron play an audio file
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export DISPLAY=:0.0
export XAUTHORITY=/home/vlad/.Xauthority 

#Runs main Alarm check C program. 
/home/vlad/MIA/Alarm/Alarm_Main