[C] avviare un comando linux ad una certa data e ora

Linguaggi di programmazione: php, perl, python, C, bash, ecc.

[C] avviare un comando linux ad una certa data e ora

Messaggioda DamianFox » martedì 15 maggio 2012, 22:03

Ciao a tutti!! Prima di tutto volevo salutarvi in quanto mi sono iscritto da poco in questo forum.

Allora il mio problema è il seguente: dovrei implementare un comando in linux, chiamato dcmd, che ha la seguente funzione:
deve eseguire un altro comando linux di default ad una certa data ed ora specificata, entrambi specificati in input

In poche parole nel terminale dovrei scrivere così: dcmd <comando> <data e ora>.

Per la data sono a buon punto, infatti riesco a gestirla in modo corretto; guardando se è nel futuro; se il giorno, mese, anno sono corretti ecc..
Anche il comando credo di aver capito come gestirlo: ho usato la system call execlp e me lo esegue correttamente.

Bene, a questo punto non sono come unire comando e data, cioè eseguire il comando indicato nell'ora indicata.

Qualcuno mi potrebbe spiegare come fare?? :muro:

Grazie! :)
Ultima modifica di DamianFox il sabato 19 maggio 2012, 15:17, modificato 2 volte in totale.
Avatar utente
DamianFox Non specificato
Prode Principiante
 
Messaggi: 42
Iscrizione: maggio 2012
Distribuzione: Ubuntu 12.10
Desktop: unity

Re: avviare un comando linux ad una certa data e ora

Messaggioda Carlin0 » martedì 15 maggio 2012, 22:08

Provato con cronotab ? dovrebbe fare proprio al caso tuo ...
Carlin0 Maschile
Rampante Reduce
Rampante Reduce
 
Messaggi: 7453
Iscrizione: novembre 2009
Località: Augusta Taurinorum
Distribuzione: Debian Squeeze
Desktop: Gnome 2.30.2

Re: avviare un comando linux ad una certa data e ora

Messaggioda DamianFox » martedì 15 maggio 2012, 22:47

Scusami ma sono ancora alle prime armi con linux, cosa devo fare con crontab?
Avatar utente
DamianFox Non specificato
Prode Principiante
 
Messaggi: 42
Iscrizione: maggio 2012
Distribuzione: Ubuntu 12.10
Desktop: unity

Re: avviare un comando linux ad una certa data e ora

Messaggioda Laycastle » martedì 15 maggio 2012, 23:23

la via più breve tra due punti è l'arabesco.
Avatar utente
Laycastle Maschile
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1183
Iscrizione: aprile 2011
Località: Torino
Distribuzione: Gentoo ~amd64
Desktop: KDE 4.8

Re: avviare un comando linux ad una certa data e ora

Messaggioda difesaparcosempione » mercoledì 16 maggio 2012, 12:23

puoi usare anche il comando at

man 1 at
per avere il manuale
ciao
http://difesasempione.wordpress.com/
http://torino.pro-natura.it/
www.pattomutuosoccorso.org
Avatar utente
difesaparcosempione Non specificato
Rampante Reduce
Rampante Reduce
 
Messaggi: 5918
Iscrizione: luglio 2006
Località: Torino

Re: avviare un comando linux ad una certa data e ora

Messaggioda DamianFox » mercoledì 16 maggio 2012, 15:29

grazie a tutti delle risposte!!
Comunque io dovrei implementare un comando che abbia circa le stesse funzioni di "crontab" e "at".

Io pensavo di creare uno script, con scritto "crontab" o "at", poi il comando e la data che passo in input..
Ovviamente lo script vorrei modificarlo attraverso il mio file.c

Potrebbe essere una buona idea??
Avatar utente
DamianFox Non specificato
Prode Principiante
 
Messaggi: 42
Iscrizione: maggio 2012
Distribuzione: Ubuntu 12.10
Desktop: unity

Re: avviare un comando linux ad una certa data e ora

Messaggioda $nake » mercoledì 16 maggio 2012, 21:59

Forse non hai capito che crontab deve aprire il tuo script.Ti conviene anche a livello di tempo,se fai script in bash,se poi fai script in python o altri linguaggi e vuoi personalizzare puoi anche lasciare perdere cron,ma se vuoi avviare un comando ogni volta ti conviene avviare direttamente con cron,dopo che ci fai l'abitudine vedrai che è semplicissimo...
Se insisti e persisiti raggiungi e conquisti!|||Non tutto il male viene per nuocere!|||Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi...(Albert Einstein )|||Umuntu ngumuntu ngabantu, "io sono ciò che sono in virtù di ciò che tutti siamo".
Avatar utente
$nake Maschile
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 2073
Iscrizione: febbraio 2012
Località: Italia
Distribuzione: Ubuntu 14.04 LTS x86_64
Desktop: Ubuntu "3D"

Re: avviare un comando linux ad una certa data e ora

Messaggioda DamianFox » sabato 19 maggio 2012, 11:19

Forse ho trovato un modo per eseguire il comando ad una certa ora senza usare uno script usando la system call "fork" con l' "exec". Al processo figlio generato faccio eseguire il comando, mentre il processo padre va avanti.. Nel processo figlio vorrei usare la system call "sleep" che mette in pausa il processo per il tempo necessario (cioè aspetto un tot di secondi, poi eseguo il comando con l'exec).

Secondo voi è valido come ragionamento?? Potrebbe causare dei processi zombie??

P.S. Il processo padre deve andare avanti perchè a seguito dell’esecuzione di dcmd deve essere ritornato immediatamente il prompt.
Avatar utente
DamianFox Non specificato
Prode Principiante
 
Messaggi: 42
Iscrizione: maggio 2012
Distribuzione: Ubuntu 12.10
Desktop: unity

Re: avviare un comando linux ad una certa data e ora

Messaggioda Wilson » sabato 19 maggio 2012, 11:24

Ma stai cercando un programma per fare questo o stai cercando di programmare AT in C cambiandogli nome?

Nel secondo caso hai decisamente sbagliato sezione (e se non è un esercizio scolastico anche obiettivo: perché cercare di fare da zero una delle utilità più antiche e ottimizzate?)
-- Provate Ubuntu! Innocuo se usato secondo le istruzioni --
Avatar utente
Wilson Non specificato
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 3318
Iscrizione: novembre 2005
Località: Torino
Distribuzione: Edubuntu 14.04 x86_64
Desktop: Unity

Re: avviare un comando linux ad una certa data e ora

Messaggioda DamianFox » sabato 19 maggio 2012, 11:38

Scusa, inizialmente avevo creato questo post nella sezione programmazione, non so perchè sia finito qui. Comunque quello che sto facendo è un esercizio scolastico ed reimplementare un comando già esistente è richiesto dal testo (tuttavia non deve avere tutte le funzionalità di AT o CRONTAB, ma alcune di esse)..
Avatar utente
DamianFox Non specificato
Prode Principiante
 
Messaggi: 42
Iscrizione: maggio 2012
Distribuzione: Ubuntu 12.10
Desktop: unity

Re: avviare un comando linux ad una certa data e ora

Messaggioda Wilson » sabato 19 maggio 2012, 12:57

Beh, l'importante è chiarire: il messaggio originario era un po' ambiguo, infatti molti dei consigli rispondevano alla domanda sbagliata (e pure i moderatori si saranno confusi, comunque ho segnalato la discussione perché sia spostata in Programmazione).

Spero che fatta chiarezza tu possa trovare migliori indicazioni, magari per facilitare la cosa modifica il titolo del primo post aggiungendo il linguaggio di programmazione che devi usare.

ps: per il futuro è meglio se descrivi meglio la situazione già da subito: è più facile trovare l'aiuto giusto e lasci anche il forum più leggibile per chi avesse le stesse necessità in futuro :D
-- Provate Ubuntu! Innocuo se usato secondo le istruzioni --
Avatar utente
Wilson Non specificato
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 3318
Iscrizione: novembre 2005
Località: Torino
Distribuzione: Edubuntu 14.04 x86_64
Desktop: Unity

Re: [C] avviare un comando linux ad una certa data e ora

Messaggioda DamianFox » sabato 19 maggio 2012, 15:47

Sì è vero! Chiedo perdono! :shy:
Allora riformulo la domanda.

Nel corso di Sistemi Operativi 1 devo fare un progetto e come richiesta c'è da implementare in linguaggio C un comando chiamato dcmd. Questo comando ha la funzione di eseguire un altro comando di default di linux ad una data e ora prestabiliti. Quindi il il comando di default e la data devono essere scritti a terminale.
La data ovviamente deve essere giusta (es: i mesi non devono avere più di 31, bisogna tenere conto anche degli anni bisestili ecc..), ho fatto tutti i controlli del caso e qui non ci sono problemi; anche il comando ho capito come eseguirlo: è sufficiente usare la system call "exec" ed il gioco è fatto. Il problema è che non so come unire i due dati, cioè eseguire il comando di default nella data indicata.

Ho trovato un modo per eseguire il comando dopo un tot di secondi, usando la fork con l'exec, e nel processo figlio creato dalla fork eseguo una "sleep". Ma sono dubbioso su questo metodo: crea dei processi zombie? E' valido usare la sleep oppure ci sono modi più sofisticati?

Spero di essere stato chiaro, altrimenti chiedete.. :D
Avatar utente
DamianFox Non specificato
Prode Principiante
 
Messaggi: 42
Iscrizione: maggio 2012
Distribuzione: Ubuntu 12.10
Desktop: unity

Re: [C] avviare un comando linux ad una certa data e ora

Messaggioda angleasruf » sabato 19 maggio 2012, 16:43

Funziona bene! Immagine
angleasruf Non specificato
Prode Principiante
 
Messaggi: 7
Iscrizione: aprile 2012

Re: [C] avviare un comando linux ad una certa data e ora

Messaggioda DamianFox » martedì 22 maggio 2012, 21:49

Ho fatto qualche test al programma e funzione con ls, mkdir, rmdir; non funziona però con "sudo su" o "cd". Quale potrebbe essere il problema?
Avatar utente
DamianFox Non specificato
Prode Principiante
 
Messaggi: 42
Iscrizione: maggio 2012
Distribuzione: Ubuntu 12.10
Desktop: unity

Re: [C] avviare un comando linux ad una certa data e ora

Messaggioda Wilson » martedì 22 maggio 2012, 23:14

Se non sbaglio cd non è un programma, ma un comando interno della shell (e comunque serve a cambiare la cartella di esecuzione del processo, non dovrebbe poter avere effetti da solo).

Per sudo non so, ma credo dipenda dalla necessità di chiedere la passwd all'utente.
-- Provate Ubuntu! Innocuo se usato secondo le istruzioni --
Avatar utente
Wilson Non specificato
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 3318
Iscrizione: novembre 2005
Località: Torino
Distribuzione: Edubuntu 14.04 x86_64
Desktop: Unity

Re: [C] avviare un comando linux ad una certa data e ora

Messaggioda DamianFox » martedì 22 maggio 2012, 23:38

Quindi "ls" o "mkdir" o "rmdir" sono programmi?
Avatar utente
DamianFox Non specificato
Prode Principiante
 
Messaggi: 42
Iscrizione: maggio 2012
Distribuzione: Ubuntu 12.10
Desktop: unity

Re: [C] avviare un comando linux ad una certa data e ora

Messaggioda Wilson » mercoledì 23 maggio 2012, 0:07

Si, esatto, per verificare puoi usare which

Codice: Seleziona tutto
$ which ls
/bin/ls
-- Provate Ubuntu! Innocuo se usato secondo le istruzioni --
Avatar utente
Wilson Non specificato
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 3318
Iscrizione: novembre 2005
Località: Torino
Distribuzione: Edubuntu 14.04 x86_64
Desktop: Unity

Re: [C] avviare un comando linux ad una certa data e ora

Messaggioda crap0101 » mercoledì 23 maggio 2012, 1:36

aggiungo, anche type ti può dare info utili
Codice: Seleziona tutto
 
crap0101@crap0101-M:~$ type -a ls cd mkdir type
ls ha "ls --color=auto" come alias
ls è /bin/ls
cd è un comando interno di shell
mkdir è /bin/mkdir
type è un comando interno di shell

http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Avatar utente
crap0101 Maschile
Rampante Reduce
Rampante Reduce
 
Messaggi: 7088
Iscrizione: ottobre 2007
Località: TO
Distribuzione: trisquel
Desktop: LXDE

Re: [C] avviare un comando linux ad una certa data e ora

Messaggioda DamianFox » mercoledì 23 maggio 2012, 15:20

ok, grazie delle risposte

Per cd penso di aver trovato la soluzione (provo ad usare la funzione chdir), mentre per sudo devo ancora trovarla. Comunque devo chiedere al docente per capire se devo gestire questo caso o meno.
Avatar utente
DamianFox Non specificato
Prode Principiante
 
Messaggi: 42
Iscrizione: maggio 2012
Distribuzione: Ubuntu 12.10
Desktop: unity

Re: [C] avviare un comando linux ad una certa data e ora

Messaggioda DamianFox » venerdì 25 maggio 2012, 17:11

Nella consegna dell'esercizio è richiesto che il risultato del comando sia scritto in un file. Ho scritto il codice, che dovrebbe essere giusto, però mi crea solo il file ma non mi scrive in esso. Ecco il mio codice:

Codice: Seleziona tutto
if (fork()  == 0) {
         
         if ((fd = open("dcmd_history.txt", O_WRONLY | O_CREAT)) == -1)
         {
            perror("dcmd_history.txt");
            return 0;
         }

         dup2(fd, 1);
   
         chmod("dcmd_history.txt",S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
         
         execv(argv[1],argv);
}


Perchè?

Grazie.
Avatar utente
DamianFox Non specificato
Prode Principiante
 
Messaggi: 42
Iscrizione: maggio 2012
Distribuzione: Ubuntu 12.10
Desktop: unity

Successiva

Torna a Programmazione

Chi c’è in linea

Visualizzano questa sezione: treled, Zoff e 3 ospiti