Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: SK0RP10N в Dec 12, 2008, 00:42



Титла: Cron Jobs
Публикувано от: SK0RP10N в Dec 12, 2008, 00:42
Здравейте :)
Как мога през web форма да добавям cron jobs ?
Благодаря много ;)


Титла: Re: Cron Jobs
Публикувано от: neter в Dec 12, 2008, 01:00
За точния синтаксис, зависи от езика, който искаш да използваш (спомени го). Относно алгоритъма, имаш два варианта според нужните права, от които се нуждаят задачите, които ще се изпълняват от cron:
1. на задачите не са нужни root права - поставяш потребителя, с който работи web сървърът, в групата на потребителя, чийто crontab ще се използва за задачите или добавяш crontab за потребителя, с който работи web сървърът (ако има нужните права за изпълнението на задачите). Задаваш права на съответния файл /var/spool/cron/crontabs/user и го редактираш чрез инструментите за редактиране на файл на съответния език;
2. на задачите са нужни root права - същото като в т.1, но тогава трябва да дадеш някакво позволение на скрипта да действа като root. Например, чрез добавяне на потребителя в /etc/sudoers с нужните права за изпълнение на дадените задачи посредством sudo без парола. Или добави потребителя към root групата и задай нужните права на файла /var/spool/cron/crontabs/root. Или смени групата на файла /var/spool/cron/crontabs/root... Методи бол и никой от тях не е за препоръчване. Гледай задачите, които ще слагаш в cron-а да не изискват root права ;)


Титла: Re: Cron Jobs
Публикувано от: SK0RP10N в Dec 12, 2008, 10:18
То добре, обаче в /var/spool/cron/crontabs
няма нищо, нито папки, нито файлове


Титла: Re: Cron Jobs
Публикувано от: neter в Dec 12, 2008, 10:33
Пак не спомена езика, който ще използваш. Относно липсващите файлове, може да не са във /var/spool/cron/crontabs, а да са във /var/spool/cron, а може и все още да не са създадени, тъй като все още не си изпълнявал командата "crontab -e" за дадения потребител. Изпълни командата "crontab -e" като root или като някой друг потребител, впиши вътре някаква задача, запази и виж дали се е създал съответният файл в някоя от горепосочените папки. Ако няма създаден файл там, а виждаш вписаната задача, когато изпълниш отново "crontab -e" или "crontab -l", тогава намери къде се намира този файл с команда (под root, независимо cron-а на кой потребител се търси)
Код
GeSHi (Bash):
  1. grep -r "някакъв текст от вписаната задача" /
Това накрая е просто наклонена черта, т.е., указваме търсене из цялата система. За текст впиши нещо от съдържанието, което си написал в crontab-а. Пример
Код
GeSHi (Bash):
  1. grep -r "5 5 * * *" /


Титла: Re: Cron Jobs
Публикувано от: SK0RP10N в Dec 13, 2008, 11:28
Добре, обаче нещо не можах да направя на php код да променя съдържанието на crontabs на моя user...


Титла: Re: Cron Jobs
Публикувано от: neter в Dec 13, 2008, 12:42
Как ще бъде структуриран кодът, зависи много от това по какъв точно начин искаш да редактираш cron файла. Ето един прост пример, при който отваряме cron файла в текстово поле, редактираме го като обикновен текст и го запазваме:
Код
GeSHi (PHP):
  1. <?php
  2.  
  3. $file = '/var/spool/cron/crontabs/user';
  4.  
  5. if($_POST['save']) {
  6.    $f = fopen($file, 'w');
  7.    fwrite($f, $_POST['save']);
  8.    fclose($f);
  9. }
  10.  
  11. echo '<form action="" method="post"><textarea name="save" cols=100 rows=20>';
  12. include($file);
  13. echo '</textarea><p><input type="submit" value="Запиши"><input type="reset"></form>';
  14.  
  15. ?>
Ако получиш грешка относно права, то погледни какви права има cron файлът (трябва потребителят на apache да може да чете и пише в него) и какви права има папката, в която се намира cron файлът (трябва потребителят на apache да може да чете, пише и изпълнява в тази папка) ;)


Титла: Re: Cron Jobs
Публикувано от: SK0RP10N в Dec 13, 2008, 17:27
Еее, жив и здрав да си :)
Стана, най-сетне ;)
Имам да те черпя една каса бира :)
Благодаря много