Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Vypnutí PC pomocí úlohy v Cronu [problém po aktualizaci]  (Přečteno 4866 krát)

PK69

  • Návštěvník
  • Příspěvků: 10
Vypnutí PC pomocí úlohy v Cronu [problém po aktualizaci]
« kdy: 06 Prosince 2008, 13:33:42 »
Zdravím,

postavil jsem si domácí server, který má běžet jen když má komu sloužit. Zapíná se magickým paketem a vypnout by se měl v okamžiku, kdy není připojen žádný klient, a to je právě ten problém.

Mám updatovaný Ubuntu server 8.04, a protože teprve začínám, používám sudo.

Napsal jsem si jednoduchý skript v PHP, který opingá dané IP adresy a když jsou všechny mrtvé, vypne PC.

Kód: [Vybrat]
<?php
$HostsAddr 
= array(
  
"192.168.68.1",
  
"192.168.68.2",
  
"192.168.68.3"
  
);

foreach (
$HostsAddr as $Addr) {
#  echo "$Addr\n";
  
exec("ping -c2 $Addr"$output$retval);
  if (
$retval == 0){ 
#    echo "někdo běží";
    
return; 
  }    
}
#echo "všichni jsou vypnuti";
exec("halt"$output$retval)
?>


V terminálu skript funguje dle očekávání.
Další vize byla přidat ho do Cronu, kde by se spouštěl každých 5 minut. Protože jsem líná lama použil jsem Webmin 1.430 a úlohu spouštěnou jako root jsem bez problémů přidal.
Když z Webadminu vyvolám ručně spuštění úlohy, proběhne opět vše bez problémů dle očekávání.

A teď problém:
Cron úlohu spouští (alespoň podle logu to tak vypadá) v logu od Cronu ani v žádném jiném není chyba a přesto úloha neproběhně korektně, protože nedojde k vypnutí PC

Tuším, že pes bude zakopán někde v právech root versus sudo, ale nevím jak dál, protože s linuxem teprve začínám...
Jak zjistím, že root má právo k vypnutí počítače příkazem halt, když používám sudo?
A neměl by být v nějakém logu chybový zápis, pokud root to právo nemá?

Poradí prosím někdo?

Děkuji

Pavel
« Poslední změna: 07 Května 2011, 14:51:34 od PK69 »

truhlik

  • Závislák
  • ***
  • Příspěvků: 1626
Re: Vypnutí PC pomocí úlohy v Cronu
« Odpověď #1 kdy: 07 Prosince 2008, 10:42:37 »
Zkusil bych to tam hodit manualne:

Aktivujte si roota:
Kód: [Vybrat]
sudo passwd root
heslo
heslo
Prihlasime se za roota:
Kód: [Vybrat]
su -
Zkontrolujem crontaby pro roota a pro uzivatele:
Kód: [Vybrat]
crontab -l #pro roota
crontab -l -u uzivatel #pro uzivatele

Je v nejakem crontabu neco? Pripadne co?

Pokud ne, tak rucne editujem:
Kód: [Vybrat]
crontab -e
Pridame neco takove:
Kód: [Vybrat]
#########################
#m h  dom mon dow   command
*/5 * * * * /cesta/ke/skriptu.php

##################

Podrobnosti o editaci crontabu:
http://www.root.cz/clanky/hratky-z-radky-na-neznamem-stroji-a-hratky-s-casem/

Nezapomente zkontrolovat jestli je skript spustitelny a nevim jak se maji presne volat php skripty z prikazove radky...
http://wiki.ubuntu.cz/P%C5%99ipojen%C3%AD%20disku
http://www.linuxsoft.cz/article.php?id_article=1351
http://www.root.cz/clanky/klonovani-obrazu-a-dva-monitory-v-linuxu
Citace: Otakar
Červi jsou moc milá zvířátka, zvláště když má jejich chovatel výhrady proti chování tučňáků

Tomáš Pikálek

  • Závislák
  • ***
  • Příspěvků: 1859
    • Tomáš Pikálek
Re: Vypnutí PC pomocí úlohy v Cronu
« Odpověď #2 kdy: 07 Prosince 2008, 12:06:52 »
Osobně jsem docela dlouho úspěšně provozoval toto řešení:
http://forum.ubuntu.cz/index.php/topic,6726.msg51299.html#msg51299
Zdá se mi to lepší než v PHP.

PK69

  • Návštěvník
  • Příspěvků: 10
Re: Vypnutí PC pomocí úlohy v Cronu
« Odpověď #3 kdy: 07 Prosince 2008, 14:11:28 »
Díky za tip, když se přihlásím jako root mám v crontabu toto:
Kód: [Vybrat]
0,5,10,15,20,25,30,35,40,45,50,55 * * * * php /home/DAA.php     #Vypne PCCož je asi dobře, ne?

Když spustím jako root
Kód: [Vybrat]
php /home/DAA.phpproběhne opět vše OK

Dál nevím..

Zatím díky Pavel
« Poslední změna: 08 Prosince 2008, 12:39:10 od Anna Taliánová »

PK69

  • Návštěvník
  • Příspěvků: 10
Re: Vypnutí PC pomocí úlohy v Cronu
« Odpověď #4 kdy: 07 Prosince 2008, 14:15:37 »
Problém nemám se skriptem (vaše řešení je určitě obecnější, ale já má připojeny prakticky pořád 4 stanice a pravděpodobnost současného restartu všech najednou je dost malá, navíc po restartu okamžitě posílají kouzelný paket).
Problém mám se spouštěním skriptu z cronu
Ale i tak děkuji

Pavel

Osobně jsem docela dlouho úspěšně provozoval toto řešení:
http://forum.ubuntu.cz/index.php/topic,6726.msg51299.html#msg51299
Zdá se mi to lepší než v PHP.
« Poslední změna: 08 Prosince 2008, 12:39:57 od Anna Taliánová »

truhlik

  • Závislák
  • ***
  • Příspěvků: 1626
Re: Vypnutí PC pomocí úlohy v Cronu
« Odpověď #5 kdy: 07 Prosince 2008, 15:17:52 »
Zkuste misto tech 0,5,10,15,... dat */5 i kdyz asi je to to same. Kouknete se do /var/log/syslog neco tam musi bejt. Pokud ne tak crontab nebezi. Coz by bylo divne.
http://wiki.ubuntu.cz/P%C5%99ipojen%C3%AD%20disku
http://www.linuxsoft.cz/article.php?id_article=1351
http://www.root.cz/clanky/klonovani-obrazu-a-dva-monitory-v-linuxu
Citace: Otakar
Červi jsou moc milá zvířátka, zvláště když má jejich chovatel výhrady proti chování tučňáků

soudruh

  • Aktivní člen
  • *
  • Příspěvků: 458
  • Na Linuxu se stále učím...
Re: Vypnutí PC pomocí úlohy v Cronu
« Odpověď #6 kdy: 07 Prosince 2008, 15:19:21 »
a nainstalovat apache, spouštět ho jako root a poté příkaz volat jako "wget http://localhost/vypnout.php" ?
Xubuntu 12.10@fermium; Ubuntu 12.04@mandelevium; Android 2.3.3@nobellum; Ubuntu 9.04@lawrencium; FreeNAS@rutherfordium; Xubuntu 12.04@dubnium

Martin - ViPEr*CZ*

  • Závislák
  • ***
  • Příspěvků: 3047
Re: Vypnutí PC pomocí úlohy v Cronu
« Odpověď #7 kdy: 07 Prosince 2008, 15:34:01 »
Mně to v pohodě jde.... zkusil jsem to dát do cronu... akorát mi to psalo, že nezná příkaz halt. Tak jsem to nahradil:

shutdown -h now
« Poslední změna: 08 Prosince 2008, 12:40:44 od Anna Taliánová »
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

PK69

  • Návštěvník
  • Příspěvků: 10
Posun v problému
« Odpověď #8 kdy: 11 Prosince 2008, 09:08:01 »
Díky všem za odpovědi, zase jsem o kousek dál, ale problém trvá.
Aktuální stav:
1) v žádném logu opravdu nic nebylo, protože cron mi posílal chybová hlášení mailem. Jsem lama, tak se mi nesmějte...
2) chybové hlášení zní:
Kód: [Vybrat]
sh: halt: not found
Zkoušel jsem ho dle pokynů výše nahradit za shutdown, ale výsledek byl stejný, tedy
Kód: [Vybrat]
sh: shutdown: not found
Dávku z cronu spouštím jako root, můj uživatelský účet (pod kterým halt/shutdown funguje) i root používají stejný shell (bash).
Takže momentálně vítězná otázka zní?

 ??? Jak zpřístupním příkaz halt (shutdown) pro účet root?

Možná je taky podvarianta, jak přinutit cron, aby používal místo sh bash, tedy pokud to chápu správně a cron používá jako shell sh (viz chybové hlášení).

Díky za jakékoliv info

Pavel


soudruh

  • Aktivní člen
  • *
  • Příspěvků: 458
  • Na Linuxu se stále učím...
Re: Vypnutí PC pomocí úlohy v Cronu
« Odpověď #9 kdy: 11 Prosince 2008, 15:40:34 »
Systé, -> Správa -> Uživatelé a skupiny -> Poklikáš na roota a v záložce Pokročilé je to k nastavení
Xubuntu 12.10@fermium; Ubuntu 12.04@mandelevium; Android 2.3.3@nobellum; Ubuntu 9.04@lawrencium; FreeNAS@rutherfordium; Xubuntu 12.04@dubnium

PK69

  • Návštěvník
  • Příspěvků: 10
Re: Vypnutí PC pomocí úlohy v Cronu
« Odpověď #10 kdy: 11 Prosince 2008, 16:00:17 »
Děkuji,
ale je to server, žádné klikací rozhraní tam nemám a ani nechci.
Ve Webminu jsem žádné pokročilé nastavení uživatelských účtů nenašel, mám jenom System > Users And Groups
a když rozbalím roota je tam jen Show Logins a Read Email, žádné Advanced apod.

Takže bych ocenil nasměrování na konkrétní konfigurační soubor.

Pavel

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Vypnutí PC pomocí úlohy v Cronu
« Odpověď #11 kdy: 11 Prosince 2008, 16:18:30 »
napiste do toho skriptu celou cestu (absolutni) k programu halt resp. shutdown
« Poslední změna: 11 Prosince 2008, 16:20:26 od kkaarreell »

nettezzaumana

  • Host
Re: Vypnutí PC pomocí úlohy v Cronu
« Odpověď #12 kdy: 11 Prosince 2008, 16:22:19 »
proc to vsichni tak komplikujete ..??

pokud bude skript v /etc/cron*, tak pobezi by-default s rootovskejma pravama ..

soudruh

  • Aktivní člen
  • *
  • Příspěvků: 458
  • Na Linuxu se stále učím...
Re: Vypnutí PC pomocí úlohy v Cronu
« Odpověď #13 kdy: 11 Prosince 2008, 17:20:24 »
/etc/passwd
Xubuntu 12.10@fermium; Ubuntu 12.04@mandelevium; Android 2.3.3@nobellum; Ubuntu 9.04@lawrencium; FreeNAS@rutherfordium; Xubuntu 12.04@dubnium

truhlik

  • Závislák
  • ***
  • Příspěvků: 1626
Re: Vypnutí PC pomocí úlohy v Cronu
« Odpověď #14 kdy: 11 Prosince 2008, 17:46:02 »
napiste do toho skriptu celou cestu (absolutni) k programu halt resp. shutdown

Takze
Kód: [Vybrat]
/sbin/shutdown -h now
« Poslední změna: 12 Prosince 2008, 00:22:19 od truhlik »
http://wiki.ubuntu.cz/P%C5%99ipojen%C3%AD%20disku
http://www.linuxsoft.cz/article.php?id_article=1351
http://www.root.cz/clanky/klonovani-obrazu-a-dva-monitory-v-linuxu
Citace: Otakar
Červi jsou moc milá zvířátka, zvláště když má jejich chovatel výhrady proti chování tučňáků

PK69

  • Návštěvník
  • Příspěvků: 10
Re: Vypnutí PC pomocí úlohy v Cronu - VYŘEŠENO
« Odpověď #15 kdy: 11 Prosince 2008, 19:38:59 »
BOMBA, konečně to funguje dle očekávání  ;D ;D ;D

Stačilo dát do skriptu onu plnou cestu.
Prostě mě nenapadlo, že jako řadový uživatel mám nastaveno prohledávání (v DOSu to bylo PATH, co je to v Linuxu nevím) jinak (a z mého pohledu lépe) než božský root...

Děkuji všem co mi pomohli!

Pavel

truhlik

  • Závislák
  • ***
  • Příspěvků: 1626
Re: Vypnutí PC pomocí úlohy v Cronu
« Odpověď #16 kdy: 12 Prosince 2008, 00:20:34 »
Rekl bych, ze to bude spis pouzitym shelem... Nech si vypsat cestu v bashi pro roota a uvidis, ze tam bude i ta pro shutdown.
Kód: [Vybrat]
echo $PATHJak je to v sh netusim.
http://wiki.ubuntu.cz/P%C5%99ipojen%C3%AD%20disku
http://www.linuxsoft.cz/article.php?id_article=1351
http://www.root.cz/clanky/klonovani-obrazu-a-dva-monitory-v-linuxu
Citace: Otakar
Červi jsou moc milá zvířátka, zvláště když má jejich chovatel výhrady proti chování tučňáků

PK69

  • Návštěvník
  • Příspěvků: 10
Re: Vypnutí PC pomocí úlohy v Cronu
« Odpověď #17 kdy: 12 Prosince 2008, 00:34:34 »
Hmm ty proměné PATH jsou prakticky identické a cesta k HALTu /sbin/ tam pro roota fakt je.

Kód: [Vybrat]
pavel@brumla:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

root@brumla:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Divné.

Ale hlavně, že to už chodí!

Pavel

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Vypnutí PC pomocí úlohy v Cronu
« Odpověď #18 kdy: 12 Prosince 2008, 12:35:13 »
No, ona ta PATH, co mas v terminalu, ale neni ta path, kterou pouziva cron. Zkus si dat do cronu nasledujici prikaz
Kód: [Vybrat]
echo "$SHELL $PATH" > /tmp/path.txta uvidis, co ti v /tmp/path.txt vyleze :-D

respektive viz man crontab, kde se rika:
Citace
The default PATH for user cron jobs is /usr/bin; while root cron jobs default to /usr/sbin:/usr/bin. The default  PATH can be set in /etc/default/cron.
« Poslední změna: 12 Prosince 2008, 12:38:34 od kkaarreell »

PK69

  • Návštěvník
  • Příspěvků: 10
Re: Vypnutí PC pomocí úlohy v Cronu [vyřešeno]
« Odpověď #19 kdy: 12 Prosince 2008, 14:25:01 »
Díky za vysvětlení,
zase jsem o něco chytřejší.

Pavel

PK69

  • Návštěvník
  • Příspěvků: 10
Stejný problém je tu zpět
« Odpověď #20 kdy: 07 Května 2011, 14:50:49 »
Zdravím všechny,
co mi před léty pomohli a prosím znovu o pomoc.
Popsané řešení fungovalo k naprosté spokojenosti několik let, než někdy minulý týden proběhla aktualizace asi 9 balíčků (byl mezi nimi i php-cli, kterého podezřívám nejvíc), výsledkem je, chybové hlášení:

Kód: [Vybrat]
sh: /ping: not found
sh: /halt: not found

aktuální podoba skriptu je:
Kód: [Vybrat]
<?php
$HostsAddr 
= array(
  
"192.168.68.1",
  
"192.168.68.2",
  
"192.168.68.3"
  
);

foreach (
$HostsAddr as $Addr) {
#  echo "$Addr\n";
  
exec("/bin/ping -c2 $Addr"$output$retval);
  if (
$retval == 0){
#    echo "někdo běží";
    
return;
  }
}
#echo "všichni jsou vypnuti";
exec("/sbin/halt"$output$retval)
?>

Všechny cesty jsou abolutní a ping i halt na nich skutečně jsou (ověřeno přes whereis).
Z terminálu funguje ping i halt úplně normálně (ověřeno pod mým účtem i pod rootem).
Chybu vyhazuje primárně cron, ale dá se reprodukovat i prostým voláním skriptu, např.:

Kód: [Vybrat]
php DAA.php
Opět zkoušeno pod mým účtem i pod rootem.

Typuji, že interpretr PHP spouští příkaz exec ještě pod nějakým jiným (třetím) účtem, jenže nevím jak to zjistit.

Pomůže mi prosím někdo?

Předem děkuji

Pavel




PK69

  • Návštěvník
  • Příspěvků: 10
Re: Vypnutí PC pomocí úlohy v Cronu [problém po aktualizaci][VYŘEŠENO]
« Odpověď #21 kdy: 26 Června 2011, 21:04:56 »
Zdravím,

výše uvedený problém vyřešen, snad tím pomůžu ostatním lamám...

Problém jsem si způsobil sám, protože jsem testoval nějakou webovou aplikaci, která tvrdě vyžadovala v PHP ZAPNUTÍ Safe Mode.
A to byl kámen úrazu - omylem jsem upravil php.ini pro CLI a nikoliv pro Apache (na chybu jsem vzápětí přišel a upravil i správný soubor, ale z lenosti jsem php.ini pro CLI už nechal být..).

A to je celé. Pointa je v tom, že php příkaz exec NEFUNGUJE, při zapnutém Safe Mode, viz manuál k PHP.
Stačilo v php.ini pro CLI Safe Mode vypnout a vše funguje krásně jako dřív...


Mějte se a nebuďte líní jako já

Pavel

 

Provoz zaštiťuje spolek OpenAlt.