{"id":540,"date":"2017-04-03T12:09:30","date_gmt":"2017-04-03T10:09:30","guid":{"rendered":"http:\/\/miroslaw.borodziuk.eu\/?p=540"},"modified":"2017-06-01T19:01:44","modified_gmt":"2017-06-01T17:01:44","slug":"at","status":"publish","type":"post","link":"http:\/\/miro.borodziuk.eu\/index.php\/2017\/04\/03\/at\/","title":{"rendered":"At"},"content":{"rendered":"<p>Polecenie<em> at<\/em> u\u017cywane jest do jednorazowego wykonania okre\u015blonego programu czy skryptu w przysz\u0142o\u015bci w zadanym czasie. Wszystkie zadania do wykonania gromadzone s\u0105 w katalogu <em>\/var\/spool\/at<\/em> i wykonywane przez demona <em>atd<\/em> w okre\u015blonym czasie. Ka\u017cde zadanie zaplanowane do wykonania b\u0119dzie mia\u0142o za\u0142o\u017cony plik, kt\u00f3ry zawiera wszelkie zmienne niezb\u0119dne do prawid\u0142owego wykonania zadania a tak\u017ce nazw\u0119 komendy lub skryptu do uruchomienia.<!--more--> Nie ma potrzeby restartowania demona <em>atd<\/em> po dodaniu zadania do wykonania. Wiele jest sposob\u00f3w na okre\u015blenie dla <em>at<\/em> czasu wykonania zadania:<\/p>\n<p><span style=\"color: #008000;\">at 1:15am<\/span> &#8211; wykonuje zadanie o 1:15 w nocy<br \/>\n<span style=\"color: #008000;\">at noon<\/span> &#8211; wykonuje zadanie w po\u0142udnie<br \/>\n<span style=\"color: #008000;\">at 23:45<\/span> &#8211; wykonuje zadanie o 11:45pm<br \/>\n<span style=\"color: #008000;\">at midnight<\/span> &#8211; wykonuje zadanie o p\u00f3\u0142nocy<br \/>\n<span style=\"color: #008000;\">at 17:05 tomorrow<\/span> &#8211; wykonuje zadanie nast\u0119pnego dnia o 17:05<br \/>\n<span style=\"color: #008000;\">at now + 5 hours<\/span> &#8211; wykonuje zadanie za 5 godzin, zamiast godzin mo\u017cemy wskaza\u0107 minuty, dni czy tygodnie<br \/>\n<span style=\"color: #008000;\">at 3:00 5\/15\/15<\/span> &#8211; wykonuje zadanie\u00a0 o 3:00 w nocy dnia 2015-05-15<\/p>\n<p>Jako opcj\u0119 komendy <em>at<\/em> mo\u017cna wskaza\u0107 <em>-f<\/em>, kt\u00f3ry oznacza plik do wykonania w zadanym czasie.<\/p>\n<p>Przyk\u0142ad poni\u017cszy uruchamia za 2 godziny od aktualnego czasu skrypt u\u017cytkownika user100 &#8211; script1.sh &#8211; z poziomu jego katalogu domowego:<\/p>\n<pre>$ at -f ~\/script1.sh now + 2 hours<\/pre>\n<p>At jest domy\u015blnie zainstalowane w RHEL ale mo\u017cemy to sprawdzi\u0107 dodatkowo:<\/p>\n<pre># yum list installed at \r\nat.x86_64 \u00a0\r\n3.1.13-22.el7@base<\/pre>\n<p>Je\u017celi pakietu nie ma mo\u017cemy go zainstalowa\u0107 w systemie:<br \/>\n<code> <\/code><\/p>\n<pre># yum \u2013y install at<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0106wiczenie 1. Zam\u00f3w, wy\u015bwietl i usu\u0144 zadanie do wykonania.<\/p>\n<p>Uruchom komend\u0119 at i podaj poprawny czas i dat\u0119 wykonania zadania. Naci\u015bnij <em>Ctrl+d<\/em> w linii polece\u0144 <em>at<\/em>&gt;.<\/p>\n<pre># at 11:30pm 6\/30\/15\r\n\u00a0at&gt; find \/ \u2013name core \u2013exec rm {} \\; &amp; \/tmp\/core.out\r\n\u00a0at&gt; &lt;EOT&gt;\r\n\u00a0job 5 at Tue Jun 30 23:30:00 2015\r\n\u00a0The system has assigned ID 5 to this at job.<\/pre>\n<p>Wylistuj plik z zadaniem dla at utworzony w katalogu <em>\/var\/spool\/at<\/em> directory:<\/p>\n<pre># ll \/var\/spool\/at\r\n\u00a0-rwx------. 1 root root 2862 Dec 4 13:49 a00005016d1f72<\/pre>\n<p>Wy\u015bwietl zawarto\u015b\u0107 tego pliku komend\u0105 <em>cat<\/em> lub <em>at<\/em>. Okre\u015bl ID zadania korzystaj\u0105c z <em>at<\/em>.<\/p>\n<pre># cat \/var\/spool\/at\/a00005016d1f72\r\n\r\n\u00a0# at \u2013c 5\r\n\u00a0#!\/bin\/sh\r\n\u00a0# atrun uid=0 gid=0\r\n\u00a0# mail root 0\r\n\u00a0umask 22\r\n\u00a0XDG_SESSION_ID=2383; export XDG_SESSION_ID\r\n\u00a0HOSTNAME=host1.example.com; export HOSTNAME\r\n\u00a0SELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTED\r\n\u00a0SHELL=\/bin\/bash; export SHELL\r\n\u00a0HISTSIZE=1000; export HISTSIZE\r\n\u00a0SSH_CLIENT=192.168.0.13\\ 64816\\ 22; export SSH_CLIENT\r\n\u00a0SELINUX_USE_CURRENT_RANGE=; export SELINUX_USE_CURRENT_RANGE\r\n\u00a0SSH_TTY=\/dev\/pts\/4; export SSH_TTY\r\n\u00a0USER=root; export USER\r\n\u00a0\u2026\u2026 . .\r\n\r\nfind \/ -name core -exec rm {} \\; &amp; \/tmp\/core.out\r\n\u00a0marcinDELIMITER0c40a7df<\/pre>\n<p>Wylistuj zadanie do wykonania komend\u0105 at lub <em>atq<\/em>:<\/p>\n<pre># at \u2013l\r\n\u00a0# atq\r\n\u00a05 Tue Jun 30 23:30:00 2015 a root<\/pre>\n<p>Finalnie usu\u0144 zadanie komend\u0105 <em>at<\/em> lub <em>atrm<\/em>:<\/p>\n<pre># at \u2013d 5\r\n\u00a0# atrm 5<\/pre>\n<p>To powinno usun\u0105\u0107 plik z zadaniem z katalogu<code> <em>\/var\/spool\/at<\/em><\/code>. Mo\u017cna potwierdzi\u0107 usuni\u0119cie pliku tak\u017ce komend\u0105 <em>atq<\/em>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Polecenie at u\u017cywane jest do jednorazowego wykonania okre\u015blonego programu czy skryptu w przysz\u0142o\u015bci w zadanym czasie. Wszystkie zadania do wykonania gromadzone s\u0105 w katalogu \/var\/spool\/at i wykonywane przez demona atd w okre\u015blonym czasie. Ka\u017cde zadanie zaplanowane do wykonania b\u0119dzie mia\u0142o za\u0142o\u017cony plik, kt\u00f3ry zawiera wszelkie zmienne niezb\u0119dne do prawid\u0142owego wykonania zadania a tak\u017ce nazw\u0119 komendy &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/miro.borodziuk.eu\/index.php\/2017\/04\/03\/at\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;At&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[34],"tags":[],"_links":{"self":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/540"}],"collection":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/comments?post=540"}],"version-history":[{"count":16,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/540\/revisions"}],"predecessor-version":[{"id":1304,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/540\/revisions\/1304"}],"wp:attachment":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/media?parent=540"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/categories?post=540"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/tags?post=540"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}