LINUX.ORG.RU

вызов zenity из cron

 , ,


0

1

Проблема в том, что при запуске из консоли ./myapp окошки выводятся, а из крона - нет

Crontab (для юзера rj45):

*/5 * * * * DISPLAY=:0.0 /home/rj45/myapp
Текст программы:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include "mysql.h"

#define DbHost "loaclhost"
#define DbUser "user"
#define DbPassword "password"
#define DbName "sdb"

MYSQL mysql;
MYSQL_RES *result;
MYSQL_ROW row;

int main(int argc, char * argv[])
{
    char* query;
    char* notify;
    pid_t pid;

    mysql_init(&mysql);
    mysql_real_connect(&mysql, DbHost, DbUser, DbPassword, DbName, 0, NULL, 0);
    mysql_query(&mysql, "SET CHARACTER SET 'utf8'");

    asprintf(&query, "select firms.title, DATE_FORMAT(notes.date, '%%T'), notes.text from notes join firms on (notes.kod=firms.kod) where DATE(notes.date) = DATE(NOW()) and notes.date <= DATE_ADD(NOW(), INTERVAL 5 MINUTE) and notes.done=0 and notes.type=1 and notes.manager=%s order by notes.date desc limit %s", argv[1], argv[2]);

    mysql_query(&mysql, query);
    result = mysql_store_result(&mysql);

    while((row = mysql_fetch_row(result))) {
	asprintf(&notify, "--text=\"Перезвонить в %s\n%s\n\nПримечание:\n%s\"", row[1], row[0], row[2]);
	pid = fork();
	if (pid == 0) {
		execl("/usr/bin/zenity", "zenity", "--info", "--title=\"Напоминание\"", notify, NULL);
	}
    }

    free(notify);
    free(query);
    mysql_free_result(result);
    mysql_close(&mysql);
}
пробовал вызывать так:
execl("/usr/bin/zenity", "DISPLAY=:0.0 zenity", "--info", "--title=\"Напоминание\"", notify, NULL);
Та же проблема.


Ну так перенаправьте куда-нибуьд stdout и stderr приложения и почитайте.

AITap ★★★★★ ()

пробовал вызывать так:

«DISPLAY=:0.0 zenity»

Это же просто argv[0], он не влияет ни на что. Для установки окружения есть execle().

DISPLAY=:0.0

Никогда так не делай, потому что нужный пользователь может быть на другом дисплее или сразу на нескольких, или на :0 вообще может быть другой пользователь.

А для установки окружения либо надо просто написать отдельной строкой key=value в кронтабе, но это повлияет на все команды, либо использовать команду env.

gentoo_root ★★★★★ ()

овер dbus «/org/freedesktop/Notifications org.freedesktop.Notifications.Notify» не?

erfea ★★★★★ ()

писать запрос к бд на 2 строчки на си, и рисовать графику zenity это так модно теперь? по-моему можно было шелл-скриптом и mysql клиентом обойтись

marvin_yorke ★★★ ()
Ответ на: комментарий от marvin_yorke

можно было шелл-скриптом и mysql клиентом обойтись

Пытался. Не осилил. :(

RJ45 ()

Эмм..

*/5 * * * * DISPLAY=:0.0 /home/rj45/myapp

*/5 * * * * env DISPLAY=:0.0 /home/rj45/myapp
Kuzz ★★★ ()
Ответ на: комментарий от Kuzz

Эмм..

Поясните мысль?

TC-у: экспортируй локаль.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.