[C] avviare un comando linux ad una certa data e ora
- DamianFox
- Prode Principiante
- Messaggi: 42
- Iscrizione: lunedì 14 maggio 2012, 16:31
- Desktop: unity
- Distribuzione: Ubuntu 12.10
[C] avviare un comando linux ad una certa data e ora
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??
Grazie!
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??
Grazie!
Ultima modifica di DamianFox il sabato 19 maggio 2012, 15:17, modificato 2 volte in totale.
-
- Rampante Reduce
- Messaggi: 7453
- Iscrizione: lunedì 2 novembre 2009, 15:29
- Desktop: Gnome 2.30.2
- Distribuzione: Debian Squeeze
- Località: Augusta Taurinorum
Re: avviare un comando linux ad una certa data e ora
Provato con cronotab ? dovrebbe fare proprio al caso tuo ...
Spoiler
Mostra
BIMBOMIX CLUB
- DamianFox
- Prode Principiante
- Messaggi: 42
- Iscrizione: lunedì 14 maggio 2012, 16:31
- Desktop: unity
- Distribuzione: Ubuntu 12.10
Re: avviare un comando linux ad una certa data e ora
Scusami ma sono ancora alle prime armi con linux, cosa devo fare con crontab?
- Laycastle
- Entusiasta Emergente
- Messaggi: 1183
- Iscrizione: sabato 9 aprile 2011, 21:54
- Desktop: KDE 4.8
- Distribuzione: Gentoo ~amd64
- Località: Torino
Re: avviare un comando linux ad una certa data e ora
Dai un occhiata: http://wiki.ubuntu-it.org/AmministrazioneSistema/Cron
la via più breve tra due punti è l'arabesco.
- difesaparcosempione
- Rampante Reduce
- Messaggi: 6031
- Iscrizione: giovedì 27 luglio 2006, 19:06
- Località: Torino
- Contatti:
Re: avviare un comando linux ad una certa data e ora
puoi usare anche il comando at
man 1 at
per avere il manuale
ciao
man 1 at
per avere il manuale
ciao
- DamianFox
- Prode Principiante
- Messaggi: 42
- Iscrizione: lunedì 14 maggio 2012, 16:31
- Desktop: unity
- Distribuzione: Ubuntu 12.10
Re: avviare un comando linux ad una certa data e ora
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??
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??
- $nake
- Entusiasta Emergente
- Messaggi: 2432
- Iscrizione: venerdì 24 febbraio 2012, 5:19
- Desktop: Ubuntu "3D"
- Distribuzione: Ubuntu 14.04 LTS x86_64
- Località: Italia
Re: avviare un comando linux ad una certa data e ora
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".
- DamianFox
- Prode Principiante
- Messaggi: 42
- Iscrizione: lunedì 14 maggio 2012, 16:31
- Desktop: unity
- Distribuzione: Ubuntu 12.10
Re: avviare un comando linux ad una certa data e ora
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.
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.
- Wilson
- Imperturbabile Insigne
- Messaggi: 3539
- Iscrizione: domenica 20 novembre 2005, 14:47
- Desktop: Unity
- Distribuzione: Edubuntu 15.04 x86_64
- Località: Torino
Re: avviare un comando linux ad una certa data e ora
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?)
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 --
- DamianFox
- Prode Principiante
- Messaggi: 42
- Iscrizione: lunedì 14 maggio 2012, 16:31
- Desktop: unity
- Distribuzione: Ubuntu 12.10
Re: avviare un comando linux ad una certa data e ora
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)..
- Wilson
- Imperturbabile Insigne
- Messaggi: 3539
- Iscrizione: domenica 20 novembre 2005, 14:47
- Desktop: Unity
- Distribuzione: Edubuntu 15.04 x86_64
- Località: Torino
Re: avviare un comando linux ad una certa data e ora
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
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
-- Provate Ubuntu! Innocuo se usato secondo le istruzioni --
- DamianFox
- Prode Principiante
- Messaggi: 42
- Iscrizione: lunedì 14 maggio 2012, 16:31
- Desktop: unity
- Distribuzione: Ubuntu 12.10
Re: [C] avviare un comando linux ad una certa data e ora
Sì è vero! Chiedo perdono!
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..
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..
-
- Prode Principiante
- Messaggi: 7
- Iscrizione: lunedì 16 aprile 2012, 17:20
Re: [C] avviare un comando linux ad una certa data e ora
Funziona bene!
- DamianFox
- Prode Principiante
- Messaggi: 42
- Iscrizione: lunedì 14 maggio 2012, 16:31
- Desktop: unity
- Distribuzione: Ubuntu 12.10
Re: [C] avviare un comando linux ad una certa data e ora
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?
- Wilson
- Imperturbabile Insigne
- Messaggi: 3539
- Iscrizione: domenica 20 novembre 2005, 14:47
- Desktop: Unity
- Distribuzione: Edubuntu 15.04 x86_64
- Località: Torino
Re: [C] avviare un comando linux ad una certa data e ora
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.
Per sudo non so, ma credo dipenda dalla necessità di chiedere la passwd all'utente.
-- Provate Ubuntu! Innocuo se usato secondo le istruzioni --
- DamianFox
- Prode Principiante
- Messaggi: 42
- Iscrizione: lunedì 14 maggio 2012, 16:31
- Desktop: unity
- Distribuzione: Ubuntu 12.10
Re: [C] avviare un comando linux ad una certa data e ora
Quindi "ls" o "mkdir" o "rmdir" sono programmi?
- Wilson
- Imperturbabile Insigne
- Messaggi: 3539
- Iscrizione: domenica 20 novembre 2005, 14:47
- Desktop: Unity
- Distribuzione: Edubuntu 15.04 x86_64
- Località: Torino
Re: [C] avviare un comando linux ad una certa data e ora
Si, esatto, per verificare puoi usare which
Codice: Seleziona tutto
$ which ls
/bin/ls
-- Provate Ubuntu! Innocuo se usato secondo le istruzioni --
- crap0101
- Rampante Reduce
- Messaggi: 8242
- Iscrizione: martedì 30 ottobre 2007, 6:33
- Desktop: LXDE
- Distribuzione: Ubuntu 18.04.1 LTS
- Sesso: Maschile
- Località: TO
- Contatti:
Re: [C] avviare un comando linux ad una certa data e ora
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
- 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
- DamianFox
- Prode Principiante
- Messaggi: 42
- Iscrizione: lunedì 14 maggio 2012, 16:31
- Desktop: unity
- Distribuzione: Ubuntu 12.10
Re: [C] avviare un comando linux ad una certa data e ora
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.
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.
- DamianFox
- Prode Principiante
- Messaggi: 42
- Iscrizione: lunedì 14 maggio 2012, 16:31
- Desktop: unity
- Distribuzione: Ubuntu 12.10
Re: [C] avviare un comando linux ad una certa data e ora
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:
Perchè?
Grazie.
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);
}
Grazie.
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 11 ospiti